​http://poj.org/problem?id=1061​

 

两只青蛙是同时跳的 如果两只青蛙的步子一样大 那永远也无法相遇

否则 考虑用拓展欧几里得求(a*x)%b=c的最小非负整数解 将步子之差(m-n)作为a 总长度l作为b 初始距离y-x作为c(注意不能是(x-y))即可

 

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;

void exgcd(ll a,ll b,ll& x,ll& y)
{
ll tx,ty;
if(b==0){
x=1,y=0;
return;
}
exgcd(b,a%b,tx,ty);
x=ty,y=tx-a/b*ty;
}

int main()
{
ll xx,yy,m,n,l;
ll a,b,c,gcd,x,y,s;
scanf("%lld%lld%lld%lld%lld",&xx,&yy,&m,&n,&l);
if(m==n) printf("Impossible\n");
else{
a=n-m,b=l,c=xx-yy;
exgcd(a,b,x,y);
gcd=a*x+b*y;
if(c%gcd!=0) printf("Impossible\n");
else{
x*=(c/gcd);
s=abs(b/gcd);
x=(x%s+s)%s;
printf("%lld\n",x);
}
}
return 0;
}