做法:首先我们找到一个先手的必败态 2001 11 2
然后我们往前推
必胜 必败
11.3 11.4
11.1 11.2
10.30 10.31
10.28 10.29
…… ……
10.2 10.1
9.30
9.29 9.28
9.27 9.26
…… ……
9.1 9.2
8.30 8.31
…… ……
8.2 8.1
7.31 7.30
7.29 7.28
…… ……
7.1 7.2
6.30 6.29
…… ……
6.2 6.1
5.31 5.30
5.29 5.28
…… ……
5.1 5.2
4.30 4.29
…… ……
4.2 4.1
3.31 3.30
3.29 3.28
…… ……
3.1 3.2
2.28 2.29
…… ……
2.2 2.1
1.31 1.30
…… ……
1.1 1.2
12.30 12.31
12.28 12.29
…… ……
12.2 12.1
11.30
11.29 11.28
…… ……
11.3 11.4
从上述推的过程中我们发现除了,9.30和11.30这两个日期外先手赢外,其他的日和月的和为偶数时先手赢,否则后手赢
AC代码:
#include<iostream>
#include<cstdio>
#define rep(i,s,t) for(int i = (int)(s); i <= (int)(t); i++)
#define rev(i,t,s) for(int i = (int)(t); i >= (int)(s); i--)
#define pb push_back
#define sz(x) (int)(x).size()
using namespace std;
typedef long long ll;
const int mod = 1e9+7;
const int maxn = 1e5+5;
int main()
{
#ifdef LOCAL_FILE
freopen("in.txt","r",stdin);
#endif // LOCAL_FILE
// ios_base::sync_with_stdio(0);
// cin.tie(0),cout.tie(0);
int t;
scanf("%d",&t);
while(t--)
{
int y,m,d;
scanf("%d %d %d",&y,&m,&d);
if(d == 30 && (m == 11 || m == 9))
printf("YES\n");
else
{
if((m+d)%2 == 0) printf("YES\n");
else printf("NO\n");
}
}
return 0;
}