POJ 1061 青蛙的约会

学长口中恶意到裸题,我就只能呵呵了。主要运用一次运用扩展欧几里德算法,列举学霸教我的一个例子(6x+12y = 6的解为x =1,y = 0;所以6x1+12y1=12的解为x1/2 = x,y2/2 = y);除此之外还要在impossible的时候注意判定。

#include<iostream>
using namespace std;

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

int main()
{
    long long x,y,m,n,L,s =0,k =0;
    cin >> x>> y>> m>> n>> L;
    long long mn = m-n;
    long long xy = x-y;
    long long yx;
    if(m>n)
    {
        xy = (y-x+L)%L;
        yx = y-x;
    }
    else
    {
        xy = (x-y+L)%L;
        mn = n-m;
        yx= x-y;
    }

    ex_gcd(mn,-L,xy,s,k);
    if((x-y)%xy !=0)
    {
        cout<< "Impossible" << endl;
    }
    else
    {
        long long t = s*(yx)/xy;
        t = t%L;
        if(t < 0) t+=L;
        cout<< t << endl;
    }
    return 0;
}
posted @ 2014-07-23 10:10  TK在颤抖  阅读(133)  评论(0编辑  收藏  举报