A - juego aburrido HDU - 1525 (Juego)

A - juego aburrido HDU - 1525

epidemia de momento, hay dos personas muy aburrido, pequeña A y B pequeño, listo para jugar a un juego, el juego como éste, de dos números naturales inicio de la carrera. Un pequeño primer jugador menos cualquier múltiplo de dos números positivos menor del mayor de los dos números, siempre que el número resultante debe ser no negativo. A continuación, el segundo jugador B a las dos figuras pequeñas obtiene haciendo el mismo procesamiento, dos jugadores alternativamente hasta que un jugador puede ser restado del múltiplo del número más pequeño de los grandes números, a 0 para ganar. Por ejemplo, el jugador puede partir de (25,7) Inicio:

25 7 
11 7 
4 7 
4 3 
1 3 
1 0 

Un pequeño ejemplo de esto es la victoria.

Varios conjuntos de entrada de entrada, no más de seis grupos. Cada fila es un conjunto de datos, que comprende dos números enteros positivos M, N (m, n < 231). Salida
Para cada línea de entrada, línea de salida, si una pequeña victoria, entonces la salida "Stan gana" De lo contrario, la salida "N.º 5 de
WINS." Supongamos que los dos jugadores tienen un buen tiempo. La última línea de entrada contiene dos ceros, no debe ser tratado.

Sample Input
34 12
15 24
0 0
Sample Output
Stan wins
Ollie wins

pensamiento

  • El significado de los problemas: hay dos números a, b, hay dos personas en un juego completo con dos figuras, dos números son a su vez un mayor número - cualquier número de otros tiempos (pero requiere el número está fuera de la resta un número no negativo), los resultados obtenidos en la copia al mayor número, piden que puso estos dos números se restan para que el resultado aparece 0, entonces el tiempo que esa persona va a ganar.
  • Análisis:
    1. Antes de marchar cada grupo, que por defecto son a> = b, si el valor no es así, el intercambio de dos números.
    2. Si a == b o a% b == 0, entonces la corriente estaría cerca de la operación debe ganar
    3. Si \ (A> B * 2 \) , entonces la persona que está realizando actualmente la operación debe ganar, 因为当前正要操做的人一定知道:a%b、b 这个状态是必胜态,还是必败态( ganar estado:. si se refiere a la persona a hacer cualquier cosa en este estado, que va a ganar) Si este estado es ganar estado, entonces simplemente dejar que los resultados de las operaciones de los valores a%b+b、b, entonces la única otra persona a a%b+b、bconvertirse a%b、b, a continuación, el resto es esta persona en la operación en estado victoria, esta persona va a ganar, y si a%b、bestá condenado al estado de fallo, esa persona se convierte en el resultado después de la operación a%b、b, las otras personas en este condenadas al fracaso el estado de funcionamiento, a continuación, un cierto número, por lo que uno gana o
    4. Si \ (b <a <2 * b \) , entonces es sólo un número de paso de dos resta hasta que el estado cumpla con victoria o perder estado "a% b == 0 || una > = 2b"

solución del problema

#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;
}

Supongo que te gusta

Origin www.cnblogs.com/lql-nyist/p/12636734.html
Recomendado
Clasificación