Codeforces834C El juego sin sentido

Descripción del título:

Slastyona y su fiel perro Pushok están jugando un juego sin sentido  que de hecho es muy interesante.

El  juego consta de múltiples  rondas. Sus reglas son muy simples: en cada ronda,  se elige un número natural  k . Entonces, el que lo dice (o ladra) más rápido que el otro gana la  ronda. Después de eso, el puntaje del ganador se multiplica por  k 2 , y el puntaje del perdedor se multiplica por  k . Al comienzo del  juego, tanto Slastyona como Pushok tienen puntajes iguales a uno.

Desafortunadamente, Slastyona había perdido su bloc de notas donde se registró la historia de todos los  n  juegos. Sin embargo, logró recordar los resultados finales de cada juego, pero todos sus recuerdos de ellos son vagos. Ayude a Slastyona a verificar su corrección o, para decirlo de otra manera, para cada par de puntajes determinado determine si era posible que un juego terminara con tal resultado o no.

Entrada

En la primera cadena, se da el número de juegos  n  (1 ≤  n  ≤ 350000).

Cada  juego está representado por un par de puntajes  ab  (1 ≤  a ,  b  ≤ 10 9 ), los resultados de Slastyona y Pushok, correspondientemente.

Salida

Para cada par de puntajes, responda " Sí" si es posible que un juego termine con el puntaje dado, y " No" de lo contrario.

Puede generar cada letra en mayúsculas o minúsculas (superior o inferior).

Tema: Dados dos números, dos personas juegan el juego, el puntaje inicial es 1, el puntaje del grupo ganador se multiplica por la segunda potencia de k, y el número se multiplica por k. Pregunte si se puede dar el puntaje de las dos personas después de la ronda x. Dos números

Análisis:

  Establecemos el puntaje de un lado después de una ronda del juego como * k ^ 2, y el otro lado como b * k ^ 2, luego el puntaje de ambos lados después de la ronda del juego es a * b * k ^ 3, y establecemos el puntaje del juego i-round como ki, entonces el producto de los puntajes de ambas partes después del último juego es 1 * 1 * k1 ^ 3 * k2 ^ 3 *… * kn ^ 3 = (k1 * k2 * k3… * kn) ^ 3; si el resultado es legal, dado El producto de dos números debe ser el cubo de un número determinado (es decir, k1 * k2 * k3 ... * kn), podemos encontrar este número abriendo el cubo y luego multiplicar k por un lado y k ^ 2 por un lado durante el proceso de puntuación , Entonces el resultado final debe ser divisible por k1 * k2 * k3 ... * kn;

En resumen, hay dos condiciones para que nuestro juicio sea legal:

1. Multiplica el cubo para obtener un número entero;

Los enteros obtenidos en 2.1 son todos factores de dos números.

Finalmente, el código:

1 #include <cstdio>
 2 #include <cstring>
 3 #include <cmath>
 4 #include <algorithm>
 5  int main () {
 6      int n;
7      scanf ( " % d " , & n);
8      while (n-- ) {
 9          largo  largo a, b;
10          scanf ( " % lld% lld " , & a, & b);
11          long  long ans = ceil (pow (a * b, 1.0 / 3 ));  // 向上 取 整
12         if (ans * ans * ans == a * b && a% ans == 0 && b% ans == 0 )   // juzga si es legal 
13              printf ( " Sí \ n " );
 14          más 
15              printf ( " No \ n " ) ;
 16      }
 17      devuelve  0 ;
 18 }
Ver código

 

Supongo que te gusta

Origin www.cnblogs.com/li-jia-hao/p/12752028.html
Recomendado
Clasificación