Description
我們把這兩隻青蛙分別叫做青蛙A和青蛙B,並且規定緯度線上東經0度處爲原點,由東往西爲正方向,單位長度1米,這樣我們就得到了一條首尾相接的數軸。設青蛙A的出發點座標是x,青蛙B的出發點座標是y。青蛙A一次能跳m米,青蛙B一次能跳n米,兩隻青蛙跳一次所花費的時間相同。緯度線總長L米。現在要你求出它們跳了幾次以後纔會碰面。
Input
Output
Sample Input
1 2 3 4 5
Sample Output
4
解題思路
題目大意:有兩隻青蛙A&B,A在座標x,B在座標y,
青蛙A一次跳躍可以前進m單位距離,青蛙B一次跳躍可以前進n單位的距離,兩青蛙都在同一緯度,該緯度長度爲L。兩隻青蛙同方向同時跳啊跳
問:最少跳多少次,它們纔可以相遇,如果不能相遇,輸出 impossible
AC代碼
#include<stdio.h>
long long gcd( long long x, long long y )
{
if( y == 0 )
{
return x;
}
return gcd( y, x % y );
}
int exgcd( long long a, long long b, long long &x, long long &y )
{
if( b == 0 )
{
x = 1;
y = 0;
return a;
}
int r = exgcd( b, a % b, x, y );
long long t = x;
x = y;
y = t - a/ b* y;
return r;
}
int main()
{
long long x, y, m, n, l;
while( scanf( "%lld %lld %lld %lld %lld", &x, &y, &m, &n, &l ) != EOF )
{
long long a = n - m, b = l, c = x- y, p, q;
long long d = gcd( a, b );
if( c % d )
{
puts( "Impossible\n" );
continue;
}
a /= d, b /= d, c /= d;
exgcd( a, b, p, q ); //求出一組解p & q
p *= c;
long long t = p % b;
while( t < 0 )
t += b; //求p 的最小正解t
printf( "%lld\n", t );
}
}