/*
zoj 1913 博弈
思路:递推
举25 7为例,则代码中的vector中为3 1 1 3(大的数对小的数反复取整所得)
不妨把最后的获胜者标记为a,则vector中最后一个元素看起,3必定为a
取整,递推知道倒数第二个元素1为b(代表令一个人),第二个元素1为
a,剩下第一个元素3。要注意的是a是获胜者。假设整个3都是b所取整的,
那么b完全可以把第一个3拆分成一个2和一个1,他取2,从而逼迫a取1,
这样最后是b获胜,矛盾了。所以我们要把第一个3拆分成2,1。递推知道2为a
所取,即取第一步的是a,即a是stan,stan获胜。
*/
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
vector <int>v;
int main()
{
int m,n,i;
bool id;
while( cin>>m>>n && ( m || n ) )
{
v.clear();
while( m!=0 && n!=0 )
{
if( m>n )
{
v.push_back( m/n );
m%=n;
}
else
{
v.push_back( n/m );
n%=m;
}
}
if( v.size()==1 )
{
cout<<"Stan wins\n";
continue;
}
id=0;
for( i=v.size()-2;i>=0;i-- )
{
if( v[i]>1 )
{
if( id==1 ) id=0;
continue;
}
id=!id;
}
if( id==0 ) cout<<"Stan wins\n";
else cout<<"Ollie wins\n";
}
return 0;
}
zoj 1913 Euclid's Game
最新推荐文章于 2017-07-24 14:40:33 发布