您的位置:首页 > 其它

HDU1851_A Simple Game_求sg

2012-07-27 00:56 399 查看
/*
*State: 1851    0MS    268K    862 B    C++
*题目大意:
*        (类似)给定n堆石子,然后规定每堆石子只能
*        取的个数,然后最先取完者胜,要求判断局势的奇异。
*解题思路:
*        分别求sg即可。
*/
#include <iostream>
#include <stdio.h>
using namespace std;

const int MAX = 21;
int get_sg(int n, int t)
{
int sg[MAX], vst[MAX];
for(int i = 0; i < MAX; i++)
{
int h = 1;
memset(vst, 0, sizeof(vst));
while(i >= h && h <= t)
vst[sg[i - h++]] = 1;
for(int j = 0; j <= i; j++)
{
if(!vst[j])
{
sg[i] = j;
break;
}
}
}
return sg
;
}

int main(void)
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif
int cas;
scanf("%d", &cas);
while(cas--)
{
int n, yihuo = 0;
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
int pile, pile_tmp, lit;
scanf("%d %d", &pile, &lit);
pile_tmp = get_sg(pile, lit);
yihuo ^= pile_tmp;
}
if(!yihuo)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: