a题:
算是一个模拟题吧,就模拟++操作。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int ans=0;
char op[10];
for(int i=0;i<n;i++)
{
scanf("%s",op);
if(op[0]=='+')
ans++;
else if(op[0]=='-')
ans--;
if(op[2]=='+')
ans++;
else if(op[2]=='-')
ans--;
}
printf("%d\n",ans);
}
return 0;
}
b题:
题意还是比较好理解,由于题目答案可以任意,随意输出一个就可以了。
其实方法就是尽量的保证2边和的差值最小,然后进行取。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cstdlib>
#define MAX 1000001
using namespace std;
char ans[MAX];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int suma=0,sumb=0,cou=0;
for(int i=0;i<n;i++)
{
int ita,itb;
scanf("%d%d",&ita,&itb);
if(abs(suma+ita-sumb)<=abs(sumb+itb-suma))
suma+=ita,ans[cou++]='A';
else
sumb+=itb,ans[cou++]='G';
}
ans[cou]='\0';
if(abs(suma-sumb)>500)
printf("-1\n");
else
printf("%s\n",ans);
}
return 0;
}
C:
题目描述比较复杂,其实想明白了就很简单,如果2个都有1的话那么是肯定可以变化的,如果2个全为0也行,只有当一个没有1,而一个有1的时候不可以。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#define MAX 1000001
using namespace std;
char stra[MAX],strb[MAX];
int main()
{
while(scanf("%s%s",stra,strb)!=EOF)
{
if(strlen(stra)!=strlen(strb))
{
printf("NO\n");
continue;
}
int flaga=0,flagb=0;
for(int i=0;i<strlen(stra);i++)
{
if(stra[i]=='1')
flaga=1;
if(strb[i]=='1')
flagb=1;
if(flaga&&flagb)
break;
}
if(flaga==flagb)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
D题:一堆石子就不用说了吧,两堆就是经典的威佐夫博奕(Wythoff Game),应为数据量小直接写的递归,三堆石子我觉得是威佐夫博奕(Wythoff Game)和尼姆博奕(Nimm Game)合体加强版不过不是单纯的合体....
对于当n=3的情况,因为属于nim游戏,所以有结论当a1^a2^a3=0为必败点
代码:
#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
int d[301][301];
int dd[302][302][302];
int f2(int a,int b)
{
if(a>b){int t=a;a=b,b=t;}
if(d[a][b]!=-1)
return d[a][b];
for(int i=a-1;i>=0;i--)
if(!f2(i,b))
{
d[a][b]=1;
return 1;
}
for(int i=b-1;i>=0;i--)
if(!f2(a,i))
{
d[a][b]=1;
return 1;
}
for(int i=a;i>=1;i--)
if(!f2(a-i,b-i))
{
d[a][b]=1;
return 1;
}
d[a][b]=0;
return 0;
}
int main()
{
int m;
int a,b,c;
scanf("%d",&m);
if(m==1)
{
scanf("%d",&a);
if(a)
printf("BitLGM");
else
printf("BitAryo");
}
else
if(m==2)
{
scanf("%d%d",&a,&b);
memset(d,-1,sizeof(d));
d[0][0]=0;
if(f2(a,b))
printf("BitLGM");
else
printf("BitAryo");
}
else
{
memset(dd,0,sizeof(dd));
scanf("%d%d%d",&a,&b,&c);
if(a^b^c)
printf("BitLGM");
else
printf("BitAryo");
}
}