本帖最后由 天馬行空 于 2015-2-4 14:36 編輯
第三題.
先說結論吧.敗局狀態集L={{[na],[nb]}|n為自然數},其中a=(1+sqrt(5))/2,b=(3+sqrt(5))/2,[.]為高斯函數/gauss/下取整函數/int/截尾函數/trunc/地板函數/floor(愛咋叫咋叫吧..).
于是{50,81}是敗局.從100中取走19即為第一步的正解.
下面稍微多說一點點..
觀察{[na]},{[nb]}這兩個數列:
首先由beatty定理知這兩個數列無重復的覆蓋了自然數集(0除外).(相關證明如若想要自行搜索.)
ps.數列的單調性則是顯然的.
其次,不難證明[na]+n=[nb].(反正,假定數列滿足beatty定理的形式,由此式亦可算出對應的系數(指之前的黃金數).)
然后稍微說下這的確是L的證明:
首先,其中兩兩間顯然不能轉化:
沒有重復數,故取一堆不能轉化;差也不重復,故同時取兩堆亦不可轉化.
其次,不屬于L的任一狀態{x,y}(x<=y)均可轉化為L中狀態:
記(x,z)為L的元素,則z<>y.
若z<y,將{x,y}取為{x,z}即可;否則,將{x,y}取為{p,q}={[(y-x)a],[(y-x)b]}即可(由z-x>y-x知p<a,q<b)(注意到q-p=b-a).
另附半個月前qq中寫的偽代碼,僅供參考:- input a,b
- x=(sqrt(5)+1)/2
- if a>b
- swap(a,b)
- t=[(b-a)*x]
- if t=a
- ret LOSE
- if t<a
- ret (t,b-a+t)
- t=[(a+1)*(x-1)]
- if a<t*x
- ret (a,a+t)
- t=[(a+1)*(2-x)]
- ret (a-t,a)
復制代碼 ps.說到qq那么問題就來了..我當時是在對誰說的呢..沒錯就是lz.. |