这题为啥评分"困难"?
水的一批.
题目描述:设青蛙A的出发点坐标是x,青蛙B的出发点坐标是y.青蛙A一次能跳m米,青蛙B一次能跳n米,两只青蛙跳一次所花费的时间相同.纬度线总长L米.现在要你求出它们跳了几次以后才会碰面.
我们可以很简单的列出方程,假定跳t次会相遇.
x+m*t=y+n*t+k*l. => x+m*t=y+n*t+k*l. => (n-m)*t+k*l=(x-y).(其中t,k为未知数)
这还用讲吗?就是个ex_gcd了.
代码如下:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll ix,iy;//解这个 ai∗xi+bi∗yi=gcd(ai,bi)
void ex_gcd(ll a,ll b)
{
if(b==0)
{
ix=1,iy=0;
return;
}
ex_gcd(b,a%b);
ll cx=ix,cy=iy;
ix=cy;iy=(cx-a/b*cy);
}
int main()
{
ll x,y,n,m,l;
cin>>x>>y>>m>>n>>l;
ll a=(n-m); ll b=l;
ex_gcd(a,b);
if((x-y)%(__gcd(a,b))!=0) puts("Impossible");
else cout<<(ix*(x-y)/(__gcd(a,b))%abs(l/(__gcd(a,b)))+abs(l/(__gcd(a,b))))%abs(l/(__gcd(a,b)))<<endl;
return 0;
}
京公网安备 11010502036488号