HDU1079 Calendar Game
设k=m+d,容易知道,终态2001.11.4为P局面(后手胜),此时k=11+4=15,为奇态。我们不妨假设:如果k为寄态,先手胜;k为偶态,后手胜。对于一年中某个日子,其后一天或者下个月同一天都是k的奇偶转换,对于先手来说,如果此时k为奇态,则必胜;如果为偶态,则看是否能给后手也留下一个偶态让其处于N局面(先手胜)。一年中可以偶态到偶态的日子只有4个:4.30、6.30、9.30、11.30。这4个日子虽然k为偶数,但也属于先手胜局面,因为这四个日子能给对方留下k偶态。
#include <stdio.h> #include <string.h> int main() { int y, m, d, t; scanf("%d", &t); while(t--) { scanf("%d%d%d", &y, &m, &d); int k = m + d; if(((m==4||m==6||m==9||m==11)&&d==30)||k % 2 == 0) puts("YES"); else puts("NO"); } return 0; }
HDU1564 Play a game
n为偶数则8600胜,n为奇数则ailyanlu胜。
证明:如下图
对于两个图,我们用1x2的矩形进行覆盖,当一个人走到一个新的1x2方块时,另一个人为必胜者,因为他总可以走该方块的另一个格子。
#include <stdio.h> #include <string.h> int main() { int x; while(scanf("%d", &x) != EOF && x) { if(x % 2 == 0) puts("8600"); else puts("ailyanlu"); } return 0; }
原文:http://www.cnblogs.com/huangfeihome/p/3651619.html