给两堆石子(题目中是数,配合一下上文这里说石子),两人依次取石子,规则是:
每次从石子数较多的那堆取(两堆石子数目相等时任选一堆),取的数目只能为石子少的
那一堆的正整数倍。最后取完一堆石子者胜。问给定情况下先手胜负情况。
确实很像欧几里得,一看就想到递归了,似乎递归也不会太难,但是多列几项就会发
现一个熟悉的身影:斐波拉契数列。最后的结论是如果两个数相等,或者两数之比大于斐
波拉契数列相邻两项之比的极限((sqrt(5)+1)/2),则先手胜,否则后手胜。
当然这道题也能用欧几里得来做,不过相比这个就麻烦不少
program poj2348;
var
a,b:int64;
begin
repeat
read(a,b);
if (a=0)and(b=0) then break;
if a>b then
begin
b:=a xor b;
a:=a xor b;
b:=a xor b;
end;
if (a=b)or(b/a>=(sqrt(5)+1)/2) then writeln('Stan wins')
else writeln('Ollie wins');
until false;
end.