[POJ1082]Calendar Game & HDU1079 Calendar Game

解題思路

 

博弈論題目可以用尋找必敗狀態的方法解決。

 

第一個必敗狀態是2001.11.04。由此可以推出其他任何時間的狀態。對於除2001.11.04外的其他任何時間,present狀態是由能移動到的下兩個next狀態決定的(當然有些時間只有一個next狀態),比如1924.12.19的狀態是由1924.12.20和1925.01.19兩個狀態決定。如果兩個next狀態中有一個必敗狀態,則present狀態爲必勝狀態;如果兩個next狀態都爲必勝狀態,則present狀態爲必敗狀態。

 

對於2001年11月的那4天,狀態都是交替勝負的。1和3號必勝,2和4號必敗。現在考慮10月份,5-31號只有一個next狀態,推算可知奇數號狀態爲必敗,偶數號狀態爲必勝。1-4號狀態有兩個next狀態,推算可知也是奇數號狀態爲必敗,偶數號狀態爲必勝。也就是說整個10月份奇數號狀態爲必敗,偶數號狀態爲必勝。

 

由此我們可以推測如果每個月都是31天的話,那麼每天的狀態都是相反的,而且相鄰的兩個月的同一天狀態也是相反的。即奇數月的奇數號狀態爲必勝,偶數號專題爲必敗;偶數月偶數號狀態爲必勝,奇數號狀態爲必敗。從數學上說,就是月與號和爲偶數的天狀態爲必勝,爲奇數的天狀態爲必敗。顯然這個是成立的,可以自己推算一下。

 

接下來要考慮特殊情況,那幾個只有30天的月份。有30號的有4,6,9,11這四個月。對於04.30,next狀態有05.01和05.30,顯然兩個next狀態是相反的,所以04.30的狀態是必勝的。所以04.30的狀態情況符合上面那個結論。06.30同樣如此。對於09.30,next狀態有10.01和10.30,同樣10.01和10.30的狀態是相反的,所以09.30的狀態爲必勝,這不符合上面的結論。但是我們可以證明這只是一種特殊情況,不影響整個結論。按照原來的結論,九月份的奇數號狀態爲必勝,偶數號狀態爲必敗。現在30號的狀態變化了,如果我們能證明29號的狀態不會因此發生變化,那麼特殊情況就只侷限於30號了。09.29號的next狀態有09.30和10.29,10.29的狀態爲必敗,所以09.29的狀態爲必勝,還是符合原來的結論。11.30同樣如此。

 

 

最後考慮特殊的2月份。如果是閏年的29天,效果和31天一個月是一樣的(只要是奇數都一樣,哪怕一個月只有一天)。對於非閏年,2月只有28天。其實28天也等同於30天的情況,推算可知02.28和04.30,06.30一樣,不影響整個結論。

 

總結,月與號和爲偶數的天狀態爲必勝,爲奇數的天狀態爲必敗。特殊情況爲09.30和11.30,這兩天的狀態也爲必勝。

 

另外還可以用倒推的辦法從最後一天開始向前推,對於2001年11月的那4天,狀態都是交替勝負的。1和3號必勝,2和4號必敗。用數組存儲必勝必敗態推出結果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章