ACM PKU 1061 青蛙的约会

题目描述:http://poj.org/problem?id=1061
#include <cstring>
#include <cstdio>
long long x,y,m,n,L,X,Y;

long long gcd(long long a, long long b)
{
    if(b==0)return a;
    else return gcd(b,a%b);
}

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


int main()
{
    //freopen("in.txt","r",stdin);
    while (scanf("%lld%lld%lld%lld%lld",&X,&Y,&m,&n,&L)!=EOF)
    {
        long long a = n-m;
        long long b = L;
        long long c = X-Y;
        long long d = gcd(a,b);   //构造不定方程;
        if(c%d!=0) { printf("Impossible\n");continue;}
        a=a/d;
        b=b/d;
        c=c/d;
        ext_gcd(a,b,x,y);  //求解ax+by=1的解
        x = x*c;
        y = y*c;  //求acx+bcy=c的解
        long long ans,t;
        t = x/b;
        ans = x - b*t;
        if(ans<=0)   //求解系;
        {
            ans+=b;
        }
        printf("%d\n",ans);
    }
    return 0;
}


posted on 2011-08-31 18:28  _Clarence  阅读(151)  评论(0编辑  收藏  举报

导航