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

时间:2021-09-21 03:44:09

题目

因为可能要参加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;
}