A
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include<bits/stdc++.h> using namespace std; int main() { string s1,s2; cin>>s1>>s2; if(s1==s2) { cout<<"Yes"; } else { cout<<"No";} }
|
B
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| #include<bits/stdc++.h> using namespace std; const int N=1e3+100; char a[N][N]; int main() { int n,m; cin>>n>>m; char c; int x,y; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin>>a[i][j]; if(a[i][j]!='.'&&a[i][j]!='*') { c=a[i][j]; x=i; y=j; } } } int cnt=0; if(c=='A') { for(int i=y;i>=1;i--) { if(a[x][i]=='*') { cnt++; } } } else if(c=='D') { for(int i=y+1;i<=m;i++) { if(a[x][i]=='*') { cnt++; } } } else if(c=='S') { for(int i=x+1;i<=n;i++) { if(a[i][y]=='*') { cnt++;} } } else { for(int i=x-1;i>=1;i--) { if(a[i][y]=='*') { cnt++; } } } cout<<cnt; }
|
C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
| #include<bits/stdc++.h> using namespace std; const int N=1e6+100; int a[N]; bool vis[N]; int b[N]; int c[N]; set<int>d; int e[N]; int f[N]; int main() { int n; cin>>n; map<int,int>mp; map<int,pair<int,int>>mpa; for(int i=1;i<=n;i++) { int x; cin>>a[i]; mp[a[i]]++; d.insert(i); } bool flag=1; for(auto &[x,y]:mp) { if(y>=3) { flag=0; cout<<-1<<'\n'; return 0; } } for(int i=1;i<=n;i++) { if(mp[a[i]]==1) { c[i]=a[i]; e[i]=a[i]; d.erase(a[i]); } else if(mp[a[i]]==2) { c[i]=a[i]; mp[a[i]]=-1; d.erase(a[i]); } else if(mp[a[i]]==-1) { e[i]=a[i]; } } int cnt=0; for(auto c:d) { f[++cnt]=c; } int num=0; for(int i=1;i<=n;i++) { if(c[i]==0) c[i]=f[++num]; } num=0; for(int i=1;i<=n;i++) { if(e[i]==0) e[i]=f[++num]; } for(int i=1;i<=n;i++) { cout<<c[i]<<' '; } cout<<'\n'; for(int i=1;i<=n;i++) { cout<<e[i]<<' '; } }
|
D
01背包
转移方程为
看题解的
1
| dp[i][j][k] = max(max(dp[i-1][j][k1]), max(dp[i-1][j-p[i]-k*c[i]][k2]));
|
利用01背包的特点,从后往前遍历容量,进行空间优化
1
| dp[j][k] = max(max(dp[j][k1]), max(dp[j-p[i]-k*c[i]][k2]));
|
里边的max值,我们可以维护一个容量为j时的mx数组mx[j],进一步简化
1
| dp[j][k] = max(mx[j], mx[j-p[i]-k*c[i]] + a[i] + 1LL * u[i] * k);
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| #include<bits/stdc++.h> using namespace std; using ll=long long; const int N=310; ll a[N]; ll mx[N]; ll dp[N][N]; ll p[N],c[N],u[N],l[N]; int main() { int n,m; cin>>n>>m; for(int i=1;i<=n;i++) { cin>>a[i]>>p[i]>>c[i]>>u[i]>>l[i]; } for(int i=1;i<=n;i++) { for(int j=m;j>=p[i];j--) { int lim=min(l[i],(j-p[i])/c[i]); for(int k=0;k<=lim;k++) { dp[j][k]=max(mx[j],mx[j-p[i]-k*c[i]]+a[i]+u[i]*k); } } for(int j=m;j>=p[i];j--) { int limit = min(l[i], (j - p[i]) / c[i]); for (int k = 0; k <= limit; ++k) { mx[j] = max(mx[j], dp[j][k]); } } } cout<<mx[m]; }
|
E
1 2 3 4 5 6 7 8 9 10 11
| #include<bits/stdc++.h> using namespace std; int main() { long long n,x,y; cin>>n>>x>>y; cout<<max({n*n/3*x,n*n/4*y,n*n/3*x-x+y}); return 0; }
|