这题为啥评分"困难"?
水的一批.
题目描述:设青蛙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; }