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
Source
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
structmt
{
__int64 d;
__int64 x,y;
};
mt extended_eu(__int64 a,__int64 b)//扩展欧几里得算法;
{
mt temp,re;
if(b==0)
{
temp.d=a;
temp.x=1;
temp.y=0;
return temp;
}
temp=extended_eu(b,a%b);
re.d=temp.d;
re.x=temp.y;
re.y=temp.x-(a/b)*temp.y;
return re;
}
int main()
{
__int64 x,y,m,n,l,a,b;
mt last;
while(scanf("%I64d%I64d%I64d%I64d%I64d",&x,&y,&m,&n,&l)!=EOF)
{
b=y-x;
last=extended_eu(m-n,l);
if(b%last.d!=0)//判断是否有解;
printf("Impossible\n");
else
{
a=last.x*(b/last.d)%l;
while(a>0)
{a-=fabs(1.0*l/last.d);}
while(a<0)
{a+=fabs(1.0*l/last.d);}
printf("%I64d\n",a);
}
}
}