题目:hdu3951
题意:有一圈硬币有n个。每个人每次可以拿连续的1到k个。谁先拿完谁赢。
解答:n<=k:先手赢
k =1:看奇偶
其他情况:!!!!!第一个拿完之后就变成了一条链。这时候第二个人把这条链分为相同长度的两个部分。然后先手拿啥他就对应的拿啥。
因为:sg值一样的两个游戏处于必败状态。先手干什么后手就在另一个游戏上干什么,最后后手肯定胜利。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
int n,k;
int main()
{
int T;
scanf("%d",&T);
for(int i = 1;i <= T;i++)
{
int ans = 0;
memset(vis,0,sizeof(vis));
scanf("%d%d",&n,&k);
printf("Case %d: ",i);
if(n <= k)
puts("first");
else
{
if(k == 1)
if(n % 2)
puts("first");
else
puts("second");
else
puts("second");
}
}
return 0;
}