青蛙的约会
[Time Gate]
https://www.luogu.org/problemnew/show/P1516
【解题思路】
两只青蛙相遇,会有[(x-y)+k(m-n)]%l=0;(k表示跳的次数)。
采用换元法替换可推导得到扩欧的式子exgcd(b,l,x,y);
最重要的是
即((x*(A/d))%(l/d)+(l/d))%(l/d)【求最小解的式子,不理解先背下来】。
【code】
1 // 2 // main.cpp 3 // frog 4 // 5 // Created by dongzhenbo on 2019/7/9. 6 // Copyright © 2019 dongzhenbo. All rights reserved. 7 // 8 9 #include <cstdio> 10 #include <algorithm> 11 using namespace std; 12 long long x1,y1,n,m,l,d; 13 long long Exgcd(long long a,long long b,long long &x1, long long &y1){ 14 if(!b){ 15 x1=1; 16 y1=0; 17 return a; 18 } 19 d=Exgcd(b,a%b,x1,y1); 20 long long t=x1; 21 x1=y1; 22 y1=t-a/b*y1; 23 return d; 24 } 25 int main(){ 26 long long x,y; 27 scanf("%lld%lld%lld%lld%lld",&x,&y,&m,&n,&l); 28 long long a=x-y; 29 long long b=n-m; 30 if(b<0){ 31 b*=(-1); 32 a*=(-1); 33 } 34 Exgcd(b,l,x1,y1); 35 if(a%d!=0) 36 printf("Impossible\n"); 37 else printf("%lld\n",((x1*(a/d))%(l/d)+(l/d))%(l/d)); 38 return 0; 39 }