문제 밸리 P1290 [유클리드 게임 로스 솔루션

이 문제는 너무 많은 문제를 필요로하지 않았다, 당신은 단지 추론 볼 필요가 :

우리는 두 수 있다고 가정 \ (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;
}

추천

출처www.cnblogs.com/Agonim/p/12080772.html