中文题 题意好理解
两只青蛙跳了t步,A的坐标为x+mt B的坐标为y+nt 相遇的充要条件
mt-y-nt=Lp
方程可列
(n-m)t+Lp=x-y
满足的最小t即为解
#include<iostream>
using namespace std;
typedef __int64 ll;
ll exgcd(ll m ,ll & x ,ll n ,ll &y)
{
ll x1,y1,x0,y0;
x0=1;y0=0;
x1=0;y1=1;
ll r=(m%n+n)%n;
ll q=(m-r)/n;
x=0;y=1;
while(r)
{
x=x0-q*x1;
y=y0-q*y1;
x0=x1;
y0=y1;
x1=x;
y1=y;
m=n;
n=r;
r=m%n;
q=(m-r)/n;
}
return n;
}
/*
两只青蛙跳了t步,A的坐标为x+mt B的坐标为y+nt 相遇的充要条件
mt-y-nt=Lp
方程可列
(n-m)t+Lp=x-y
满足的最小t即为解
*/
int main()
{
ll t,p;
ll x,y,m,n,l;
while(scanf("%I64d%I64d%I64d%I64d%I64d",&x,&y,&m,&n,&l)!=EOF)
{
ll M=exgcd(n-m,t,l,p);
/*如果当前x-y是句初始点坐标差不能被gcd(n-m,L)的最大公约数整除
证明除不尽则会一直在追赶,或者m==n那么就会一直在同样的距离 */
if((x-y)%M || m==n)
{
printf("Impossible\n");
}
else
{
ll s=l/M;
t=t*((x-y)/M);
//+s在mod个s避免在第一圈的情况就遇到了,实际上是遇不到的
t=(t%s+s)%s;
printf("%I64d\n",t);
}
}
return 0;
}