地址:http://acm.scs.bupt.cn/onlinejudge/showproblem.php?problem_id=1203
博弈论地址:http://www.cnblogs.com/jaskist/archive/2009/04/28/1445317.html
当分割的块的个数分别异或为0时,先决策者必失败,否则成功
FunnyGame1Submit: 44 Accepted:17Time Limit: 1000MS Memory Limit: 65536K
Description
Alice 和 Bob在玩一个叫357的游戏,游戏的布局如图一。
游戏的规则很简单,在每一步时,当前的游戏者可以在当前的状态下选取某一行的若干个连续(至少1个)的没有被消去的环进行消去。
当所有的环都被消去,则游戏结束。消去最后一个环的游戏者为赢家。
Alice走第一步,两人都以最优的策略进行消去。
Alice非常想赢得游戏,在某个给定的状态下并且Alice先走,他想知道自己是否有赢的可能。
![](onlinejudge/picture/1203_2.jpg)
Input
输入包含多组测试数据。
第一行为一个正整数T,表示测试数据的组数。
每组测试数据占3行,每行是一个0 1 串,分别对应游戏的每一行,其中第一行的长度为3,第二行为5,第三行为7。0 表示该环还没有被消去,1则表示已经消去。
Output
对于每组测试数据,输出一行,如果Alice可以赢得该场游戏,则输出“Win”,否则输出“Lose”。
Sample Input
3
111
11111
1111111
110
11111
1111111
100
11111
1111111
Sample Output
Lose
Win
Win
#include<iostream>
using namespace std;
char a[18];
int main()
{
int i,n,j=0,count=0;;
scanf("%d",&n);
while(n--)
{
j=count=0;
for(i=0;i<3;i++)
cin>>a[i];
a[3]='1';
for(i=4;i<9;i++)
cin>>a[i];
a[9]='1';
for(i=10;i<17;i++)
cin>>a[i];
for(i=0;i<17;)
{
if(a[i]=='1')
i++;
else
{
while(a[i]=='0'&&i<17)
{
count++;
i++;
}
j=j^count; //异或 当分割的块异或为0时 先决策者必然失败
count=0;
}
}
if(j!=0)
cout<<"Win"<<endl;
else
cout<<"Lose"<<endl;
}
system("pause");
}