題目:
Adam和Eve玩一個遊戲,他們先從1900.1.1到2001.11.4這個日期之間隨意抽取一個日期出來。然後他們輪流對這個日期進行操作:
1 : 把日期的天數加1,例如1900.1.1變到1900.1.2
2 : 把月份加1,例如:1900.1.1變到1900.2.1
其中如果天數超過應有天數則日期變更到下個月的第1天。月份超過12則變到下一年的1月。而且進行操作二的時候,如果有這樣的日期:1900.1.31,則變成了1900.2.31,這樣的操作是非法的,我們不允許這樣做。而且所有的操作均要考慮曆法和閏年的規定。
誰先將日期變到2001.11.4誰就贏了。
每次遊戲都是Adam先操作,問他有沒有必勝策略?
格式
輸入格式
一個測試點。多組數據。
第一行爲數據組數。
接下來一行X Y Z表示X年Y月Z日
輸出格式
輸出“YES”or“NO”表示亞當是否有必勝策略。
樣例輸入1
3
2001 11 3
2001 11 2
2001 10 3
樣例輸出1
YES
NO
NO
解題思路:這個題看起來是一個日期的計算的題,其實把情況都計算一遍就會看出來這是一個找規律的博弈題。
即2001.10.4和2001.11.3必勝(此時m+d=偶數)再推上去是11.2,10.3,9.3,都是必敗(此時m+d=奇數),以此類推……
從9月30和11月30開始推算的話也是必勝的(這是一個例外)
程序代碼:
#include<stdio.h>
int main()
{
int i,n,m,j,k,x,y,z;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d%d%d",&x,&y,&z);
if(y==9&&z==30)
printf("YES\n");
else if(y==11&&z==30)
printf("YES\n");
else if((y+z)%2==0)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}