cf-787a

Posted 雪晨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cf-787a相关的知识,希望对你有一定的参考价值。

https://vjudge.net/problem/709847/origin

拓展欧几里德:a*x+b=c*y+d; -> a*x+c*y=d-b;

代码:

#include<bits/stdc++.h>
using namespace std;

#define ll long long

ll exgcd(ll a,ll b,ll &x,ll &y){
    if(b==0){
        x=1;
        y=0;
        return a;
    }
    ll d=exgcd(b,a%b,x,y);
    ll tmp=x;
    x=y;
    y=tmp-a/b*y;
    return d;
}

int main(){
    ll a,b,C,D,x,y;
    while(cin>>a>>b>>C>>D){
        if(b<D){//若b<D,那么y<0,
            //原方程式等价于y=(a*x+b-d)/c,
            //下面的处理可保证x不小于0,但是不能保证y,
            //所以需要保证(a*x+b-d)%c==0,即:保证:b>D;若不成立需交换;
            swap(a,C);
            swap(b,D);
        }
        ll d = exgcd(a,C,x,y);
        ll c = D-b;
        if(c%d)  cout<<"-1"<<endl;
        else{
            x=x*(c/d);
            x=(x%(C/d)+(C/d))%(C/d);
            cout<<b+a*x<<endl;
        }
    }
    return 0;
}

以上是关于cf-787a的主要内容,如果未能解决你的问题,请参考以下文章

CF-787D-线段树建图+最短路

CF787D Legacy

[CF787D]遗产(Legacy)-线段树-优化Dijkstra(内含数据生成器)

[补档计划] 树4 - 线段树

在python中,a+=a-=a的值是多少?

20170924 a20170924 a