zoukankan      html  css  js  c++  java
  • 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
    ");
        else printf("%lld
    ",(x*(s/ans)%(l/ans)+(l/ans))%(l/ans));
        //system("pause");
        return 0;
    }
  • 相关阅读:
    鼠标效果
    全选与全不选
    正则表达式
    下拉菜单
    图片轮播
    弹出层
    间隔与延时
    JS基础
    引入
    样式表 文字
  • 原文地址:https://www.cnblogs.com/ChrisKKK/p/11442378.html
Copyright © 2011-2022 走看看