题意:
两只青蛙面基,环球跳直到跳到同一个点上,
输入青蛙位置x,y,青蛙一次跳的长度m,n,环球周长l,
求要跳几次。
题解:
得到公式(n-m)*t+l*k=(x-y) —> a*x+b*y=c,
进递归最终得t*x=c,得x=c/t,判断条件c%t!=0,
#include<cstdio>
using namespace std;
const int N=1000;
typedef long long lld;
lld c;
lld gcd(lld a,lld b,lld &x,lld &y)
{
if(b==0){
x=c/a;
y=0;
return a;
}
lld t=gcd(b,a%b,x,y);
x=y;
y=(c-a*x)/b;
return t;
}
int main()
{
lld x,y,m,n,l;
scanf("%lld%lld%lld%lld%lld",&x,&y,&m,&n,&l);
lld a=n-m,b=l;c=x-y;
lld t=gcd(a,b,x,y);
if(c%t!=0)
printf("Impossible\n");
else{
while(x<0)x+=b;
printf("%lld",x);
}
}