青蛙的约会
# 题意
两个青蛙位于一条纬度线上,纬度线首尾相接,a开始位于x,b开始位于y,纬度线长L,a以每秒n速度,b以每秒m速度向同一方向移动,求最少的时间两青蛙相遇
# 题解
设 x'为时间,则满足x' · (a-b) ≡ x-y (mod L) 即方程,扩展欧求出特解后求最小的x解即可
1 #include <bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 ll exgcd(ll a,ll b,ll &x,ll &y){ 5 if(!b){ 6 x=1,y=0; 7 return a; 8 } 9 ll d=exgcd(b,a%b,y,x); 10 y-=(a/b)*x; 11 return d; 12 } 13 int main(){ 14 ll x,y,m,n,L; 15 cin>>x>>y>>m>>n>>L; 16 ll xx,yy; 17 ll d=exgcd(m-n,L,xx,yy); 18 if((x-y)%d) puts("Impossible"); 19 else { 20 xx*=(y-x)/d; 21 ll t=abs(L/d); 22 cout << (xx%t + t)%t << endl; 23 } 24 }