Luogu_P1516题解青蛙的约会 exgcd
Posted chriskkk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Luogu_P1516题解青蛙的约会 exgcd相关的知识,希望对你有一定的参考价值。
题目链接:https://www.luogu.org/problem/P1516
由题目可以得出:
x+k*m=y+k*n(mod l)
将mod l放入公式:
(x-y)=(n-m)*k+l*t
设n-m为w 设x-y为c
则
k*w + l*t = c
那么就可以用exgcd来求解了。
先解出
k*w + l*t = d = gcd(w,l)
然后把答案乘 c/d 就可以求出了。
但是还不是最优解,有一个神仙公式,也就是代码统计答案的最后一行。
取个模。
代码如下:
#include<bits/stdc++.h> #define ll long long using namespace std; ll X,Y,m,n,l,x,y; ll exgcd(ll a,ll b,ll &x,ll &y) if(!b) x=1;y=0; return a; ll ans=exgcd(b,a%b,x,y); ll z=x; x=y; y=z-y*(a/b); return ans; int main() scanf("%lld%lld%lld%lld%lld",&X,&Y,&m,&n,&l); ll k=n-m,s=X-Y; if(k<0) k=-k;s=-s; ll ans=exgcd(k,l,x,y); if(s%ans!=0) printf("Impossible\n"); else printf("%lld\n",(x*(s/ans)%(l/ans)+(l/ans))%(l/ans)); //system("pause"); return 0;
以上是关于Luogu_P1516题解青蛙的约会 exgcd的主要内容,如果未能解决你的问题,请参考以下文章