zoukankan      html  css  js  c++  java
  • POJ 1061 青蛙的约会(扩展欧几里德)

    /*
    设过s步后两青蛙相遇,则必满足以下等式:
    (x+m*s)-(y+n*s)=k*l
    变形得:
    (n-m)*s+k*l=x-y
    令:
    a=n-m,b=l,c=x-y
    得:
    a*s+b*k=c,根据扩展欧几里德:
    只要c%gcd(a,b)==0,则两青蛙能相遇,否则不能。
    所以原问题可用扩展欧几里德解方程。
    */

    代码:

    View Code 
     1 #include <iostream>
     2 #include <cstdio>
     3 using namespace std;
     4 __int64 exgcd(__int64 a,__int64 b,__int64 &x,__int64 &y)
     5 {
     6        if(b==0)
     7        {
     8            x=1;
     9            y=0;
    10            return a;
    11        }
    12        __int64 d=exgcd(b,a%b,x,y);
    13        __int64 t=x;
    14        x=y;
    15        y=t-(a/b)*x;
    16        return d;
    17 }           
    18 int main()
    19 {
    20        __int64 a,b,c,d,x,y,m,n,l,x1,y1;
    21        scanf("%I64d%I64d%I64d%I64d%I64d",&x,&y,&m,&n,&l);
    22        a=m-n;
    23        b=l;
    24        c=y-x;
    25        if(a<0)
    26        {
    27            a=-a;
    28            c=-c;
    29        }
    30        d=exgcd(a,b,x1,y1);
    31        if(c%d)
    32            puts("Impossible");
    33        else
    34        {
    35            c/=d;
    36            b/=d;
    37            printf("%I64d\n",((c*x1)%b+b)%b);
    38        }
    39        return 0;
    40 }
    41

  • 相关阅读:
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    win10右键新建markdown文件
    force down pool_member
    自控力差,你可能忽略了一种更底层的能力
    多线程的通信问题
    多线程的安全问题
    Java实现多线程的两种方式
    为什么你成不了数据分析高手?可能是缺少这个思维
    jstack && jmap
    对ElasticSearch主副分片的理解
  • 原文地址:https://www.cnblogs.com/pony1993/p/2615081.html
Copyright © 2011-2022 走看看