本帖最后由 天马行空 于 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.. |