Coin Game HDU - 3951

原题链接
考察:博弈论
参考大佬的对称博弈,本蒟蒻是没推出来.
思路:
  先来看没有成环的情况.

  1. n为奇,先手去掉中间的石子,随后后手不管选什么都破坏平衡,先手对称选哪些,因此平衡局面0 0必然被先手遇到.
  2. n为偶,先手去掉中间两个石子,随后又形成了平衡局面.由上面先手又必胜.但是如果k==1,则先手必败.
      由未成环来推成环.
  3. n为偶,先手拿奇数个,转化为未成环的局面1,因此后手必胜;
          偶数个,转化为局面2,后手必胜.
  4. 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;
}

posted @ 2021-05-25 22:11  acmloser  阅读(34)  评论(0编辑  收藏  举报