[POJ](1082)Calendar Game ---- 找规律博弈

题目链接

做法:首先我们找到一个先手的必败态 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;
}

 

阅读更多
版权声明:本文为博主原创文章,转载请预先通知博主(〃'▽'〃)。 https://blog.csdn.net/m0_37624640/article/details/81558881
文章标签: ACM
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭