青蛙的约会

青蛙的约会

# 题意

两个青蛙位于一条纬度线上,纬度线首尾相接,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 }

 

 

上一篇:P1082 同余方程


下一篇:同余 学习笔记