题意:
1 x N的棋盘,熊猫和羊随机选择空地 下‘S’或者‘O’,谁先拼出sos谁赢,熊猫先手,下满了不分胜负输出draw。
思路:
首先s_ _s是个必胜态,因而N = 7是panda赢(中间下S,必是sheep先迈入s_ _s),然后发现大于7的奇数其实都是panda赢(虽说sheep可以在panda下s后率先构造出s_ _s态,但是先进入s_ _s的也必是sheep,这个下下就知道了)。
然后是大于七的偶数情况,如果panda先下s,sheep会先构造出必胜态,由于剩下的空格是偶数个,所以变成了panda先迈入s_ _s,所以panda不可能先下s,只能先下o,如果下了o,剩下的空格数必是奇数,此时sheep如何必胜呢?答案是连续的空格数大于等于7就行,等价于奇数个空格sheep先手,这个最小的偶数是多少呢?答案是16(不管怎么分割都最少留7个连续空格)
总结一下,大于等于7的奇数先手的panda必胜;大于等于16的偶数先手panda(必下o)留给后手sheep存在连续空格大于等于7的一共奇数个格子,sheep必胜;其余平局。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,t,cas=0;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
if(n>=16&&n%2==0) printf("Case #%d: Sheep\n",++cas);
else if(n>=7&&(n&1))printf("Case #%d: Panda\n",++cas);
else printf("Case #%d: Draw\n",++cas);
}
return 0;
}