이 문제는 너무 많은 문제를 필요로하지 않았다, 당신은 단지 추론 볼 필요가 :
우리는 두 수 있다고 가정 \ (X 방향은 Y-을 \) 제, (X \) \ 큰 값으로 설정되고, \ (그 \ Y-)는 작은 값으로 설정된다. 이제 삼가지 경우로 나누어 :
\ (1 \) . 수 개의 관계, 승리 한 동작의 배수 인 경우.
\ (2 \) . 두 몫이 경우 \ (> 1 \) , 여전히 우승 파티를 운영하고 있습니다.
\(왜?\)
예를 들어 가지고 \ (25,7 \) 입니다. 이 경우 조작 측 세 가지 옵션 갖는다 \ (18 \) \ (7 \) \ (11 \) \ (7 \) \ (4 \) \ (7 \)
그가 선택한 경우 \ (18 \) \ (7 \) , 다음 후자가 직면하게 될 것이다 (\ 11) \ (\ 7) \ 또는 \ (4 \) \ (7 \) , 그리고 그가 선택하지 않는 경우 \ (18 \) \ (7 \) , 그의 얼굴 또는 \ (11 \) \ (7 \) 또는 \ (4 \) \ (7 \) .
이 시점에서 당신은 발견 할 것이다 그 \ (11 \) \ (7 \) 와 \ (4 \) \ (7 \) 인 승리,하지만 모두 스마트만큼, 그래서 누가 할 수있는 선택할 수있는 권리를 가지고 있어야합니다 승리! 그가 선택할 수 없습니다 그 (\ 18) \ (\ 7) \ !
다시 밤나무을 제공 : \ (31 \)를 \ (6 \)
그런 다음, 그냥 파티 유일한 옵션을 얻을 찾을 것입니다 \ (7 \) \ (6 \) 또는 \ (1 \) \ (6 \) 분명히 그의 손의 관리를 보장하지만,하는 \ (1 \) \ (6 \) , 충분하지 않습니다 당신이 할 수있는 유일한 선택 \ (7 \) \ (6 \) . 따라서 \ (7 \) \ (6 \) \ (- \) \ (6 \) \ (1 \) \ (- \) \ (6 \) \ (0 \) , 결과가 승리 우세하다!
그럼 당신은 알고 있어야합니다 : 누가 이길 것 (두를 선택 또는 그 이상) 선택할 수있는 권리가있는 사람!
\ (3 \) . 상이하다 \ (1 \) , 계속
같은 밤, 들어 \ (6 \) \ (4 \) , 다음 선택의 여지가, 그것은 단지 주장을 계속하지 않습니다 우위, 같은 \ (2 \) \ (4 \) .
\(암호:\)
#include<bits/stdc++.h>
using namespace std;
bool check(int x,int y){
for(int i=1;;i++){
int ma=max(x,y);
int mi=min(x,y);
x=ma,y=mi;
//x为两数较大值,y为两数较小值
if(x%y==0){
return i%2;//若两数为倍数关系,操作的一方赢
}else if(x/y>1){
return i%2;//若两数商>1,那么还是操作一方赢
}else{
x-=y;//否则说明商为1,那就继续
}
}
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
int x,y;
cin>>x>>y;
if(check(x,y))cout<<"Stan wins"<<endl;
else cout<<"Ollie wins"<<endl;
}
return 0;
}