题目
题意:在一自东向西首尾相连长为L单位的坐标轴上有两只青蛙分别位于X,Y,它们跳一次分别为m,n个单位,问能否相遇,能输出需要跳几次。否输出impossible。
解法:
int X , Y , m , n , L , x , y , d;
void ex_gcd(int a , int b , int &d , int &x , int &y){
if(!b){
d = a ;
x = 1 ;
y = 1 ;
}else{
ex_gcd(b , a%b , d , x , y);
int t = x ;
x = y ;
y = t - (a/b)*y;
}
}
int cal(int a , int b , int c){
ex_gcd(a , b , d , x , y);
if(c%d) return -1 ;
int t = b/d;
x = x*c/d;
return (x%t+t)%t;
}
void solve(){
cin >> X >> Y >> m >> n >> L ;
int a = m - n , b = L , c = Y - X ;
if(a < 0){//保证a是正数因为这样在求gcd时不会出现负数,同时与c同号(跟据追赶关系可得)
c = -c ;
a = -a ;
}
int t = cal(a , b , c);
if(t == -1){
cout << "Impossible" << endl;
}else{
cout << t << endl;
}
}