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; }