zoukankan      html  css  js  c++  java
  • 康熙的难题(exgcd,洛谷P1516 青蛙的约会)

    x+kmy+kn(modl)

    x+km(y+kn)=lz,zZ

    xy+k(mn)lz=0

    k(m-n)-lz=-(x-y)

    S=x-y,W=n-m

    kW+lz=S(exgcd,求k)

    //我的代码

    #include<iostream>
    #define ll long long
    using namespace std;
    ll ans,x,y,k;
    void exgcd(long long a,long long b)
    {
    if(b==0)
    {
    x=1;
    y=0;

    ans=a;

    return;
    }
    exgcd(b,a%b);
    k=x;
    x=y;
    y=k-a/b*y;
    return;
    }
    int main()
    {
    ll x1,y1,m,n,l;
    cin>>x1>>y1>>m>>n>>l;
    ll a=n-m,b=x1-y1;
    if(a<0)
    {
    a=-a;
    b=-b;
    }
    exgcd(a,l);
    if(b%ans)
    cout<<"Impossible";
    else
    cout<<(b/ans*x%(l/ans)+l/ans)%(l/ans);
    return 0;
    }

    //std代码

    #include <iostream>
    using namespace std;

    long long ex_gcd(long long a, long long b, long long &x, long long &y){
    if (b == 0){
    x = 1; y = 0; return a;
    }
    long long d = ex_gcd(b, a % b, x, y);
    long long t;
    t = x; x = y; y = t - (a / b) * x;
    return d;
    }

    int main(){
    long long x0, y0, m, n, l, a, b, c, x, y;;
    cin>>x0>>y0>>m>>n>>l;
    a = m - n;
    b = l;
    c = y0 - x0;

    if (a < 0)
    {
    a = -a; c = -c;
    }
    long long d = ex_gcd(a, b, x, y);
    if (m == n || c % d != 0) cout<<"Impossible"<<endl;
    else{
    b /= d;
    c /= d;
    long long t = c * x;
    cout<<(t % b + b) % b<<endl;
    }

    return 0;
    }

  • 相关阅读:
    你知道RAID的初始化过程吗?
    Dynamic Disk Pool技术解析
    Ubuntu-16.04.6 安装 oracle 11.2.0.4 数据库database软件
    Ubuntu-16.04.6 安装 oracle 12.2.0.1 数据库database软件
    IDEA 快捷键
    Redis 常用操作命令
    甘特图
    PERT图
    现金贷
    线上信贷提供解决方案
  • 原文地址:https://www.cnblogs.com/Chri-K/p/13751509.html
Copyright © 2011-2022 走看看