第三题目 100%
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<iostream> #include<algorithm> #include<map> #include<vector> #include<string> #include<stack> #include<queue> using namespace std; int M,N,T; struct item{ int X,Y; }; item m[100100],n[100100]; int minX[100100]; bool cmp(const item &a,const item &b){ return a.Y < b.Y; } int ans = 0x7f7f7f7f; int main(){ scanf("%d%d%d",&M,&N,&T); if(T==0){ cout<<"0"; return 0; } for(int i = 0;i < M;i++){ scanf("%d%d",&m[i].X,&m[i].Y); } for(int i = 0;i < N;i++){ scanf("%d%d",&n[i].X,&n[i].Y); } sort(m,m+M,cmp); sort(n,n+N,cmp); for(int i = 0;i < M;i++){ if(m[i].Y >= T && m[i].X < ans){ ans = m[i].X; } } for(int i = 0;i < N;i++){ if(n[i].Y >= T && n[i].X < ans){ ans = n[i].X; } } minX[N] = 0x7f7f7f7f; for(int i = N - 1;i >= 0;i--){ minX[i] = min(n[i].X,minX[i + 1]); } int j = N - 1; for(int i = 0;i < M;i++){ while(j >= 0 && n[j].Y + m[i].Y >= T)--j; if(n[j + 1].Y + m[i].Y >= T && minX[j + 1] + m[i].X < ans){ ans = minX[j + 1] + m[i].X; } } if(ans >= 0x7f7f7f7f) cout<<"-1"; else cout<<ans; return 0; }
第四题 插头DP 基础题 100%
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<iostream> #include<algorithm> #include<map> #include<vector> #include<string> #include<stack> #include<queue> using namespace std; const int mod = 1000000009; int f[2][7 * 7 * 7* 7 * 7* 7]; int pow7[15]; char w[15][15]; int main(){ pow7[0] = 1; for(int i = 1;i < 15;i++){ pow7[i] = pow7[i - 1] * 7; } for(int i = 0;i < 6;i++){ scanf("%s",w[i]); } int now = 0; f[now][0] = 1; for(int i = 0;i < 6;i++){ for(int j = 0; j < 6;j++){ now ^= 1; for(int k = 0;k < 7 * 7 * 7* 7 * 7 * 7;k++){ f[now][k] = 0; if(j == 0 || k / pow7[j] % 7 != k / pow7[j - 1] % 7 || k / pow7[j] % 7 == k / pow7[j - 1] % 7 && k / pow7[j] % 7 == 0){ if(w[i][j] == '#' && k / pow7[j] % 7 != 0){ for(int l = 0;l < 7;l++){ if(l != k / pow7[j] % 7){ f[now][k] = (f[now][k] + f[now^1][k /pow7[j+1] * pow7[j + 1] + l * pow7[j] + k % pow7[j]]) % mod; } } }else if(w[i][j] != '#' && k / pow7[j] % 7 == 0){ for(int l = 0;l < 7;l++){ f[now][k] = (f[now][k] + f[now^1][k /pow7[j+1] * pow7[j + 1] + l * pow7[j] + k % pow7[j]])% mod; } } } } } } int ans = 0; for(int k = 0;k < 7 * 7 * 7* 7 * 7 * 7;k++){ ans = (ans + f[now][k]) % mod; } cout<<ans; return 0; }
全部评论
(24) 回帖