A. Bit++
没见过这么水的了,只需要注意开数组不能为a[3],a[n],n>3
代码:
#include<iostream>//CF A题
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<vector>
#include<map>
using namespace std;
char a[4];
int main()
{
int n;
cin>>n;
int s=0;
while(n--)
{
cin>>a;
if(a[0]=='+' || a[1]=='+')
s++;
if(a[0]=='-' || a[1]=='-')
s--;
}
cout<<s<<endl;
return 0;
}
B. Painting Eggs
读懂题目就很水,J要买画的鸡蛋,每次都倾向与买A的,但是买A的钱和买G的钱相差大于500时就不能买A的,只能买G的
代码:
#include<iostream>//CF B题
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<vector>
#include<map>
using namespace std;
int main()
{
int n,i,a,b;
cin>>n;
int s1=0,s2=0;
for(i=1; i<=n; i++)
{
cin>>a>>b;
s1+=a;
if(s1-s2>500 || s2-s1 >500)
{
cout<<"G";
s2+=b;
s1-=a;
}
else
{
cout<<"A";
}
}
return 0;
}
C. XOR and OR
题意:给出两个只有0和1组成的字符串,问是否能在第一串中任取两个相邻的两个数x,y,通过p=x xor y,q=x^y得到第二字符串。。。
唉~想歪了,以为异或出来就放到第二字符串,原字符串不变,这是错的,操作后原数就变了。。。
思路:1和任何数进行操作可以变成1或者0,所以只需要考虑1就行了,两字符串都有1肯定能行。。
代码:
#include<iostream>//CF C题
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<map>
using namespace std;
const int M=1000001;
char a[M],b[M];
int main()
{
cin>>a;
cin>>b;
int la=strlen(a);
int lb=strlen(b);
if(la!=lb)
{
cout<<"NO"<<endl;
}
else if(strcmp(a,b)==0)
cout<<"YES"<<endl;
else
{
int s1=0,s2=0;
for(int i=0; i<la; i++)
{
if(a[i]=='1')s1++;
if(b[i]=='1')s2++;
}
if(s1&&s2)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
D. Yet Another Number Game
需要特判。。
一堆情况,直接判断,二堆情况,对0 0 和相同情况 特殊处理,其他用威佐夫博奕,三堆情况,用尼姆博弈
代码:
#include<iostream>//CF D题
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<map>
using namespace std;
int a[5];
int main()
{
int n;
cin>>n;
for(int i=0; i<n; i++)
{
scanf("%d",&a[i]);
}
if(n==1)
{
if(a[0]!=0)
cout<<"BitLGM"<<endl;
else
cout<<"BitAryo"<<endl;
}
if(n==2)
{
if(a[0]==a[1]&&a[0]!=0)
{
cout<<"BitLGM"<<endl;
}
else
{
int k=abs(a[0]-a[1]);
int m=min(a[0],a[1]);
int g=k*(sqrt(5.0)+1)/2;//直接放里面判断答案是错的,存在精度问题
//g*=k;
// g/=2;
if(g==m)
cout<<"BitAryo"<<endl;
else
cout<<"BitLGM"<<endl;
}
}
if(n==3)
{
if((a[0]^a[1]^a[2])==0)
cout<<"BitAryo"<<endl;
else
cout<<"BitLGM"<<endl;
}
return 0;
}