伊甸園日曆遊戲(vijos--1004)

題目:

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;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章