三大死亡圣器之一的老魔杖,被誉为最强魔杖,被Harry掰断后扔在悬崖下。某一天,小A有幸在悬崖下捡到了这根魔杖,然而由于损坏严重,所以只能施一些简单的小魔法。
恰好魔法界新兴起了一种小游戏,这个游戏是这样的:
地上有一些砖块,每一块的长度都是1,2,3,4中的一个整数。每次一个人可以进行两种操作中的一种:
1.使用“粉身碎骨”咒,粉碎n个长度为n的砖块.
2.使用“变形咒”,把一个长度大于1的砖块分为两个长度大于0的砖块。 当某个人无法使用魔法时即算输。 每次游戏的初始局面是随机生成的。然而小A还有一个迷之身份一一欧握儿,所以他可以作弊,当给出一个局面时,就知道先手能否必胜,但是小A忘记了带电脑,如果你能帮
小A作弊,小A就会将老魔杖送给你。
输入的第一行包含一个整数T,表示数据组数。
接下来有T组,每组四个整数a,b,c,d,表示长度为1,2,3,4的砖块分别有多少个。
输出T行,每行一个整数,1表示先手必胜,0表示先手必败。
3 4 2 1 0 0 0 1 0 7 0 1 0
1 1 0
对于30%数据满足:a+2b+3c+4d≤10
对于70%数据满足:max{a,b,c,d}≤14
对于100%数据满足:T≤10,max{a,b,c,d}≤1010000
找出规律:用abcd分别表示1、2、3、4的数量,则当(a+c)%2==(b+d)%3时为必败态,此外均为必胜态。
大数的处理,本题只需求出对2、3取模的余数,对2取模只需判断最后一位,对3取模可以将各位数字求和后取模。
#include
#include
#include
#include
using namespace std;
int main()
{
int n;
scanf("%d",&n);
getchar();
while(n--)
{
char a[10010],b[10010],c[10010],d[10010];
scanf("%s %s %s %s",a,b,c,d);
int b1=0,d1=0;
int x,y;
for(int i=0;i