题意:
两个青蛙在一条纬度线上不同的位置朝着同一方向跳下去,青蛙$A$的出发点坐标是$x$,青蛙$B$的出发点坐标是$y$,青蛙一次能跳$m$米,青蛙$B$一次能跳$n$米,两只青蛙跳一次所花的费的时间相同,问两只青蛙跳几次后相遇(纬线长度$L$)
思路:
假设两只青蛙跳$t$后相遇,$A$要追$B(y-x)$米,每跳一次$A$会追$B(m-n)$米,则$(m-n)t=(y-x)(mod L)$即$(m-n)t+Lk=y-x$,解$t$,并求$t$的最小正整数解
Code:
#include <cstdio> #include <iostream> #include <algorithm> using namespace std; typedef long long ll; ll m, n, t, k, l, x, y; ll exgcd(ll a, ll b, ll &x, ll &y){ if(!b){ x = 1, y = 0; return a; } ll d = exgcd(b, a % b, y, x); y -= a / b * x; return d; } int main(){ cin >> x >> y >> m >> n >> l; m -= n, y -= x; if(m < 0){ y = -y, m = -m; } if(m == 0) cout << 0 << endl; else{ ll g = exgcd(m, l, t, k); if(y % g){ puts("Impossible"); } else{ l /= g; t = t * (y / g); t = (t % l + l) % l; cout << t << endl; } } return 0; }