CodeForces - 864A
题意:给偶数个卡片,给卡片编号,两个人每个人选一个号,这个人要拿走所有该号的卡片,如果所有的卡片都被拿走,并且两个人的卡片数量一样多,输出YES 和这两个序号 否则输出NO
#include<algorithm> #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<string> using namespace std; int a[110]; int main(){ int n,counts=0,sum1=0,sum2=0,flag=1; int p,q; cin>>n; int b[110]={0}; for(int i=0;i<n;i++){ cin>>a[i]; b[a[i]]++; } for(int i=1;i<=100;i++){ if(b[i]){ if(flag){ p=i; flag=0; sum1+=b[i]; }else{ q=i; sum2+=b[i]; flag=1; } counts++; } } if(counts==2&&sum1+sum2==n&&sum1==sum2){ cout<<"YES"<<endl; cout<<p<<" "<<q<<endl; }else{ cout<<"NO"<<endl; } return 0; }View Code
CodeForces - 864B
题意:有一段长度为n的字符串求一段最长由小写字母构成的的连续子串长度
题解:先把由不同小写字母构成的子串存起来,遇到大写字母就判断一下是否为最长的
#include<iostream> #include<cstdio> #include<algorithm> #include<set> using namespace std; set<int> a; int main(){ int n,maxx=0; string s; cin>>n>>s; for(int i=0;i<n;i++){ if(s[i]<='z'&&s[i]>='a'){ a.insert(s[i]); }else{ if(maxx<a.size()){ maxx=a.size(); } a.clear(); } } if(maxx<a.size()){ maxx=a.size(); } a.clear(); cout<<maxx<<endl; }View Code
CodeForces - 758B
题意:给一段由RBYG!构成的长度为n的字符串,每4个字符里都有RBYG里的一种,RBYG表示不同颜色的灯泡, ! 代表坏掉的灯泡,判断需要补多少各个颜色的灯泡
题解:可以确定周期为四,哪个位置是哪个颜色的灯泡都是固定的
#include<iostream> #include<cstdio> #include<cmath> #include<string> using namespace std; int a[6],b[110]; int main(){ string s; cin>>s; for(int i=0;i<s.length();i++){ if(s[i]!='!'&&s[i]=='R'){ b[i%4]=1; }else if(s[i]!='!'&&s[i]=='B'){ b[i%4]=2; }else if(s[i]!='!'&&s[i]=='Y'){ b[i%4]=3; }else if(s[i]!='!'&&s[i]=='G'){ b[i%4]=4; } } for(int i=0;i<s.length();i++){ if(s[i]=='!'){ a[b[i%4]]++; } } for(int i=1;i<=3;i++){ cout<<a[i]<<" "; } cout<<a[4]<<endl; return 0; }View Code