洛谷P1512伊甸园的日历游戏题解

题目

因为可能要参加qbxt的数论考试,所以最近要开始猛刷数论题了。

这是第一道,不过看样子并不想数论题啊,只是一个博弈论。

思路

一位著名老师说过,数学就是转化和化简,所以先考虑化简,先考虑化简年份,因为无论从闰年到普通年都是偶数个月,所以年份没有影响。

然后就来判断月份,我们发现11.4输,则11.3赢,10.4赢,9.4输 等等,很容易得出month + day如果是奇数的话是必输的,但是考虑特殊情况即30号情况,发现10.30是输的,所以9.30,11.30必赢。

\(Code\)

#include <bits/stdc++.h>
using namespace std;
bool ha[120][120];//i表示月,j表示day
int main()
{
    int n;
    scanf("%d", &n);
    for (int i = 1; i <= 100; i++)
        for (int j = 1; j <= 100; j++)
        {
            if ((i + j ) % 2 == 0 || (i == 9 && j == 30) || (i == 11 && j == 30))
                ha[i][j] = 1;
        }
    while (n--)
    {
        int a, b, c;
        cin >> a >> b >> c;
        if (ha[b][c])
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}
posted @ 2019-03-22 17:29  DAGGGGGGGGGGGG  阅读(329)  评论(0编辑  收藏  举报