Educational Codeforces Round 26 A B C题
题目链接
A. Text Volume
题意:计算句子中,每个单词大写字母出现次数最多的那个的出现次数(混不混乱QAQ).
解题思路:注意getchar()就没啥了.
#include<cstdio> #include<cstring> #include<iostream> #include<ctype.h> #include<algorithm> using namespace std; int main() { int n; char str[205]; cin>>n; getchar(); for(int i=0;i<n;i++) scanf("%c",&str[i]); int max_len=0,cnt=0; for(int i=0;i<n;i++) { if(isalpha(str[i])>0) { if(str[i]>='A'&&str[i]<='Z') cnt++; } else max_len=max(max_len,cnt),cnt=0; } max_len=max(max_len,cnt),cnt=0; cout<<max_len<<endl; return 0; }
B. Flag of Berland
题意:色光三原色,RGB,判断这三个字母是否都出现且围成的图案要完全一样(条纹).
解题思路:暴力模拟,扫扫扫,直接看代码吧.
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; char Map[105][105]; int n,m,x,y; void solve(char ch) { int flag=1; x=y=0; for(int i=0;i<n&&flag;i++) { for(int j=0;j<m&&flag;j++) { if(Map[i][j]==ch) { flag=0; int ii=i+1,jj=j+1; x++,y++; while(Map[i][jj]==ch&&jj<m) { jj++; y++; } while(Map[ii][j]==ch&&ii<n) { ii++; x++; } for(int _i=i;_i<ii;_i++) { for(int _j=j;_j<jj;_j++) if(Map[_i][_j]!=ch) { x=y=0; return ; } } } } } } int main() { cin>>n>>m; for(int i=0;i<n;i++) scanf("%s",Map[i]); if( (n*m)%3!=0 ) { puts("NO"); return 0; } int a=0,b=0,a1=0,b1=0,a2=0,b2=0; solve('R'); a=x,b=y; solve('B'); a1=x,b1=y; solve('G'); a2=x,b2=y; if(a&&b&&a1&&b1&&a2&&b2&&a*b+a1*b1+a2*b2==n*m &&a==a1&&a1==a2&&b==b1&&b1==b2) puts("YES"); else puts("NO"); return 0; }
C. Two Seals
题意:在n*m纸上,盖两个印章,在不越界前提下要求总面积最大,印章可旋转着盖.
解题思路:双重for循环,直接暴力枚举,每次取一次max.
刚开始没注意到是盖两个,用背包写了半天,半路发现GG思密达...
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int x[105],y[105]; int main() { int n,a,b,sum=0; cin>>n>>a>>b; if(a>b) swap(a,b); for(int i=1;i<=n;i++) cin>>x[i]>>y[i]; for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) { int sumx,sumy; sumx=x[i]+x[j],sumy=max(y[i],y[j]); if(sumx>sumy) swap(sumx,sumy); if(sumx<=a&&sumy<=b) sum=max(sum,x[i]*y[i]+x[j]*y[j]); sumx=x[i]+y[j],sumy=max(y[i],x[j]); if(sumx>sumy) swap(sumx,sumy); if(sumx<=a&&sumy<=b) sum=max(sum,x[i]*y[i]+x[j]*y[j]); sumx=y[i]+x[j],sumy=max(x[i],y[j]); if(sumx>sumy) swap(sumx,sumy); if(sumx<=a&&sumy<=b) sum=max(sum,x[i]*y[i]+x[j]*y[j]); sumx=y[i]+y[j],sumy=max(x[i],x[j]); if(sumx>sumy) swap(sumx,sumy); if(sumx<=a&&sumy<=b) sum=max(sum,x[i]*y[i]+x[j]*y[j]); } cout<<sum<<endl; return 0; }