标签:
Description
Input
Output
Sample Input
2 1 2 2 1 1
Sample Output
Yes No
思路: 博弈, 先找必胜状态或必败状态, 判断控制权在谁手里,他就必胜, 判断控制权在谁手里就判断第一个非1的数钱有几个1 如果是偶数个控制权就在第一个手里。
代码:
#include<stdio.h>
#include<string.h>
#define N 110000
int main(void)
{
int t, i, j, n, f, ok;
int a[N];
scanf("%d", &t);
while(t--)
{
f = 0;
ok = 1;
scanf("%d", &n);
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
for(i = 0; i < n; i++)
{
if(a[i] > 1)
{
ok = 0;//判断是否全是1.
break;
}
else
f++;//判断第一个不是1的位置。
}
if(ok==0)//如果全是1的话,如果有奇数堆第一个人必胜。
{
if(f%2)
printf("No\n");
else
printf("Yes\n");
}
else//如果有非1的存在,就判断控制权再谁手里, 如果在第一非1的数前有偶数个1控制权在第一个人手里。
{
if(f%2)
printf("Yes\n");
else
printf("No\n");
}
}
return 0;
}
标签:
原文地址:http://www.cnblogs.com/dll6/p/5782820.html