青蛙的约会

[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 }

 

posted @ 2019-07-09 22:32  GTR_PaulFrank  阅读(158)  评论(0编辑  收藏  举报