632A - Grandma Laura and Apples 20171126
按照题意模拟即可
#include<stdlib.h> #include<stdio.h> #include<math.h> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define LL long long LL n,p,h,k,f[41]; int main() { scanf("%I64d%I64d",&n,&p); for(LL i=0;i<n;i++) { string s;cin>>s; f[n-i]=(s.size()>5); } for(LL i=1;i<=n;i++)k=k*2+f[i],h+=f[i]; return printf("%I64d ",(2*k-h)*p/2),0; }
632B - Alice, Bob, Two Teams 20171126
扫一遍,再扫一遍_(:з」∠)_
#include<stdlib.h> #include<stdio.h> #include<math.h> #include<cstring> #include<iostream> #include<algorithm> using namespace std; long long n,p[500001],_,ans; string s; int main() { scanf("%I64d",&n); for(int i=1;i<=n;i++) scanf("%I64d",&p[i]); cin>>s; for(int i=1;i<=n;i++) _+=(s[i-1]=='B')*p[i],ans=_; for(int i=1;i<=n;i++) if(s[i-1]=='A') _+=p[i],ans=max(ans,_); else _-=p[i]; _=0; for(int i=1;i<=n;i++) _+=(s[i-1]=='B')*p[i]; for(int i=n;i>=1;i--) if(s[i-1]=='A') _+=p[i],ans=max(ans,_); else _-=p[i]; return printf("%I64d ",ans),0; }
632C - The Smallest String Concatenation 20171126
sort一下再输出就好了
#include<stdlib.h> #include<stdio.h> #include<math.h> #include<cstring> #include<iostream> #include<algorithm> using namespace std; string s[50001]; int n; bool cmp(string a,string b){return a+b<b+a;} int main() { scanf("%d",&n); for(int i=1;i<=n;i++) cin>>s[i]; sort(s+1,s+n+1,cmp); for(int i=1;i<=n;i++) cout<<s[i]; return printf(" "),0; }
632D - Longest Subsequence 20171126
记录每个数字有多少个在(a)内的因数即可
#include<stdlib.h> #include<stdio.h> #include<math.h> #define N 1000001 #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n,m,l=1,k,a[N],cnt[N]; int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); if(a[i]<=m)cnt[a[i]]++; } for(int i=m;i>=1;i--) if(cnt[i]) for(int j=2*i;j<=m;j+=i) cnt[j]+=cnt[i]; for(int i=1;i<=m;i++) if(k<cnt[i]) k=cnt[i],l=i; printf("%d %d ",l,k); for(int i=1;i<=n;i++) if(l%a[i]==0) printf("%d ",i); return 0; }
632E - Thief in a Shop 20171126
标解好像是FFT?
事实上好像一通乱搞就过了?
不知道怎么用语言描述我的做法,用心感受代码吧~
#include<stdlib.h> #include<stdio.h> #include<math.h> #define N 1001 #include<vector> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n,k,x,m,mi=1000,a[N],f[N*N]; vector<int>ans; int main() { scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) scanf("%d",&x),a[x]=1,m=max(m,x),mi=min(mi,x); for(int i=1;i<N*N;i++)f[i]=k+1; for(int i=1;i<=m;i++) if(a[i])for(int j=i-mi;j<=m*k;j++) f[j]=min(f[j],f[j-i+mi]+1); for(int i=0;i<=m*k;i++)if(f[i]<=k)ans.push_back(i+mi*k); for(int i=0;i<ans.size();i++) printf("%d%c",ans[i],i==ans.size()-1?' ':' '); return 0; }
632F - Magic Matrix 20190312
bitset大法好!!!
#include<bits/stdc++.h> using namespace std; #define N 2501 #define GG return printf("NOT MAGIC "),0 bitset<N>f[N]; int n,m,a[N][N]; struct rua{int x,y,z;}w[N*N]; bool cmp(rua x,rua y){return x.z>y.z;} int main() { scanf("%d",&n); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%d",&a[i][j]); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(a[i][j]!=a[j][i] || a[i][i])GG; for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) w[++m]={i,j,a[i][j]}; sort(w+1,w+m+1,cmp); for(int i=1;i<=m;) { int j=i; while(j<=m && w[j].z==w[i].z) f[w[j].x][w[j].y]=f[w[j].y][w[j].x]=1,j++; while(i<j){if((f[w[i].x]|f[w[i].y]).count()<n)GG;i++;} } return printf("MAGIC "),0; }
(就这样水掉了一轮_(:з」∠)_