http://poj.org/problem?id=2348
题意:给定两个数,任意从一个数中去掉另一个数的倍数,问什么时候能取到0,谁就胜利了;
当m能整除n时和m>2*n时属于必胜状态;
其余状态递归判断即可
// File Name: poj2348.cpp
// Author: bo_jwolf
// Created Time: 2013年10月05日 星期六 18:50:04
#include<vector>
#include<list>
#include<map>
#include<set>
#include<deque>
#include<stack>
#include<bitset>
#include<algorithm>
#include<functional>
#include<numeric>
#include<utility>
#include<sstream>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<ctime>
using namespace std;
bool dfs( long long m, long long n ){
if( m % n == 0 || m > 2 * n )
return 1;
return ( dfs( n, m - n ) + 1 ) & 1;
}
void Swap( long long &a, long long &b){
long long temp = a;
a = b;
b = temp;
}
int main(){
long long m, n;
bool flag;
while( scanf( "%lld%lld", &m, &n ) != EOF ){
if( !m && !n )
break;
if( m < n ) Swap( m, n );
flag = dfs( m, n );
if( flag )
printf( "Stan wins\n" );
else
printf( "Ollie wins\n" );
}
return 0;
}