zoj 1913 Euclid's Game

来源:互联网 发布:java 实体类命名规范 编辑:程序博客网 时间:2024/04/29 05:04
/*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;}

原创粉丝点击