Coin Game HDU - 3951
原题链接
考察:博弈论
参考大佬的对称博弈,本蒟蒻是没推出来.
思路:
先来看没有成环的情况.
- n为奇,先手去掉中间的石子,随后后手不管选什么都破坏平衡,先手对称选哪些,因此平衡局面0 0必然被先手遇到.
- n为偶,先手去掉中间两个石子,随后又形成了平衡局面.由上面先手又必胜.但是如果k==1,则先手必败.
由未成环来推成环. - n为偶,先手拿奇数个,转化为未成环的局面1,因此后手必胜;
偶数个,转化为局面2,后手必胜. - n为奇,先手拿奇数个形成局面2,后手必胜(k>1)
偶数个,转化为局面1,后手必胜.
由此当n<=k||(n&1&&k==1)先手必胜,其余负.
Code
#include <iostream>
#include <cstring>
using namespace std;
int n,k;
int main()
{
int T,kcase = 0;;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&k);
if(n<=k) printf("Case %d: first\n",++kcase);
else if((n&1)==0) printf("Case %d: second\n",++kcase);
else if(k==1) printf("Case %d: first\n",++kcase);
else printf("Case %d: second\n",++kcase);
}
return 0;
}