- 退屈なゲームHDU - 1525
流行の瞬間2人の自然数は、レースのスタートから、2つの非常に退屈な人は、このようなゲーム、プレイをプレイする準備ができて、小型のAとBの小、があります。小さな最初のプレイヤーマイナス二つの数の大きい方から小さい2つの正の数の倍数、得られた数値が負でなければならないことを条件とします。一人のプレイヤーが勝つために0に、多数のより少ない数の複数から差し引くことができるまで、次に、二つの小さな図面を第2プレイヤBは、二人のプレイヤーが交互に、同様の処理を行って得られました。例えば、(25,7)スタートからプレーヤーができます:
25 7
11 7
4 7
4 3
1 3
1 0
本の小さな例が勝利です。
入力の入力複数のセット、せいぜい6つのグループ。各行には2つの正の整数M、N(M、N <含む、データのセットである 231)。出力
は、出力がそれ以外の場合は、出力「スタンが勝つ」小さな勝利あれば入力の各行に対して、出力ライン、「のOllie第5
WINS。」2人の選手は良い時間を持っていることを前提としています。扱われるべきではない入力の最後の行には、二つのゼロが含まれています。
Sample Input
34 12
15 24
0 0
Sample Output
Stan wins
Ollie wins
思考
- 問題の意味: - 他の任意の回数(ただし、減算数は外で必要となる二つの数、bは二人の人物との完全なゲーム内の2人がいる、があるが、2つの数字が順番に大きな数ですこれら2つの数値を置く非負の数)、より多くのコピーで得られた結果は、頼むが、結果は、時間の人が勝つことを、0表示されるように減算されています。
- 分析:
値は、2つの数のやり取りでない場合は、各グループを行進する前に1.は、デフォルト、> = Bです。
2. == Bまたは%bの== 0の場合、現在の操作に近いだろう勝たなければならない
場合3. (A> B * 2 \)\そして、人は現在、操作は勝たなければならない作っています、因为当前正要操做的人一定知道:a%b、b 这个状态是必胜态,还是必败态
(状態に勝つ:。)それはこの状態で何かをするためにどのように人を参照しているかどうか、あなたは勝つ。この状態が状態を獲得することである場合には、単に値に対する操作の結果を聞かせてa%b+b、b
、その後、唯一の他の人することa%b+b、b
になってa%b、b
、その後、残りは勝ち状態の動作時にこの人あり、この人が勝つ;場合はa%b、b
、障害状態に運命にある、その人は、操作後の結果となりa%b、b
、この内の他の人が失敗する運命に動作状態は、特定の数なので、1つの勝利または
4の場合、\(B <<2 * B \) 、それは勝利状態を満たすかまたは状態を失うまでにのみステップ番号2の減算であります"%Bの== 0 || A > = 2B"
問題の解決策
#include<iostream>
#include<cmath>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
void Swap(int & a, int & b)
{
if(a < b)
swap(a, b);
}
int main()
{
/* freopen("A.txt","r",stdin); */
int a, b;
while(scanf("%d %d", &a, &b) && a + b)
{
Swap(a, b);
int win = 0;
while(b)
{
if(a % b == 0 || a / b >= 2) break; //这个地方是必胜态
a -= b;
Swap(a, b);
win ^= 1;
}
if(win == 0)
printf("Stan wins\n");
else
printf("Ollie wins\n");
}
return 0;
}