Calendar Game(博弈)

发布于 2020-10-29  0 次阅读


题目大意:

Calendar Game
给你一个年月日,你可以选择月或者日中的一个让其增加1
如果下个月没有当前的天数就不能移动月,到达11月4日就不能移动,无法移动的人失败,超过11月4日的也算输

思路:

最后胜利的是奇数局势,即我们需要保证对面走偶数局势,即为我们必须一直占据奇数局势
注意点即为每个月的30号这天,因为可以转移到1号和下个月的30号造成不同的奇偶局势
而我们只需要考虑9月30日和11月30日,因为这两天是奇数开局并且为必败态

AC Code:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<math.h>
using namespace std;
#define endl '\n'
#define INF 0x3f3f3f3f
// #define int long long
#define debug(a) cout<<#a<<"="<<a<<endl;
typedef long long ll;
const double PI=acos(-1.0);
const double e=exp(1.0);
const int M=1e9+7;
const int N=2e5+7;
inline int mymax(int x,int y){return x>y?x:y;}
inline int mymin(int x,int y){return x<y?x:y;}

void solve(){
    int y, m, d;
    cin>>y>>m>>d;
    if((m+d)%2==0 || (d==30 && (m==9 || m==11))) cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
	return ;
}

signed main(){
    int T;
    cin>>T;
    while(T--) solve();
    return 0;
}

平平无奇的大学在读本科生