poj 1061-青蛙的约会-拓展gcd

来源:互联网 发布:如何传软件 编辑:程序博客网 时间:2024/04/26 05:43

赤裸裸的 拓展欧几里得的应用。
注意 无法完成的条件的限制
和为什么是 M-n不是 n-m;
x+m*t-y-n*t==l*p;//因为m小,所以m应该在前面的。
x-y==(n-m)*t+l*p;
欧几里得就带入 n-m 和 l 这俩参数
然后 就是模板的套路了,。
纯纯的模板

 #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#define LL long longusing namespace std;//x*a+y*b==gcd(a,b);//(m-n)x+lb==X-Y;//和 变量名字一样// 拓展欧几里德。long long exgcd(LL a,LL b,LL &x,LL &y){    if(b==0)     {     x=1;           y=0;           //如果b为0,那么gcd a就是a 啊;         return a;     }      LL r=exgcd(b,a%b,x,y);      LL t=x;      x=y;      y=t-a/b*y;      return r;}int main(){   LL n,m,x,y,l;    while(~scanf("%lld%lld%lld%lld%lld",&x,&y,&m,&n,&l))    {   LL ar,al;       long long e=exgcd(n-m,l,ar,al);//为啥非得这样        if((x-y)%e||m==n)        {   printf("Impossible\n");        }        else        {                //   n*t+y+l*p=m*t+x;            //               LL mod=l/e;            LL ans=(ar%mod+mod)%mod;             printf("%lld\n",ans);        }    }    return 0;}
0 0
原创粉丝点击