Congruencia ---------- citas rana

Dos ranas en el conocido Internet, y hablaban alegremente, por lo que es necesario para ver el lado.
Están encantados de encontrar que viven en la misma línea de latitud, por lo que accedieron a su oeste-hop hasta que encuentre hasta el momento.
Pero antes de empezar a olvidar una cosa muy importante, ni piden otras características, no existe un acuerdo para cumplir con la ubicación específica.
Pero las ranas son muy optimistas, siempre y cuando se sienten se ha estado moviendo en una dirección determinada salto, siempre se ejecutan en cada uno de otros.
Pero a menos que estos dos ranas saltan al mismo punto, al mismo tiempo, de lo contrario es imposible no conocer al.
Para ayudar a estos dos rana optimista, se le pide que escriba un programa para determinar si se puede cumplir con dos ranas, se reunirá en qué momento.
Llamamos a dos ranas fueron llamados Una rana y la rana B, una longitud predeterminada y latitud 0 grados en la línea de origen en el sentido positivo de este a oeste, una unidad de 1 m de longitud, de manera que se obtiene un tope ejes .
Una rana se proporciona es las coordenadas del punto de partida x, las coordenadas del punto de partida de la rana B es y.
Una rana m m un salto, una rana salto n B m, dos salto de rana toma al mismo tiempo.
línea latitud longitud L metros.
Ahora se encontrará varias veces después del salto encontrarlos.
Formato de entrada
de línea de entrada 5 incluye sólo los números enteros x, y, m, n, L, donde x ≠ y <2000000000,0 <m, n <2000000000,0 <L <2100000000.
Formato de salida
de salida para cumplir con el número requerido de lúpulo, nunca se cumple si la línea de salida "imposible"
Rango de datos
x ≠ y <2000000000x ≠ y < 2000000000,

0 <m, n <20000000000 <m, n <2000000000,

0 <L <21000000000 <L < 2100000000
de entrada de la muestra:
12 345

Resultado de muestra:
4

#include <iostream> 
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long LL;
LL exgcd(LL a, LL b, LL &x, LL &y){
 if (!b){
  x = 1, y = 0;
  return a;
 }
  LL d = exgcd(b, a % b, y, x);
 y -= a / b * x;
 return d;
}
int main(){
 LL a, b, m, n, l;
 cin >> a >> b >> m >> n >> l;
  LL x, y;
 LL d = exgcd(m - n, l, x, y);
 if ((b - a) %d )    puts("Impossible");
 else{
  x *= (b - a) / d;
  int t = abs(l / d);
  cout << (x % t + t) % t << endl;
 }
 return 0;
}
Publicados 106 artículos originales · ganado elogios 67 · vistas 5418

Supongo que te gusta

Origin blog.csdn.net/qq_45772483/article/details/105020783
Recomendado
Clasificación