老魔杖

题目描述

三大死亡圣器之一的老魔杖,被誉为最强魔杖,被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

你可能感兴趣的:(老魔杖)