青蛙的约会 POJ1061

来源:互联网 发布:excel找出重复数据行 编辑:程序博客网 时间:2024/05/09 14:17

这道题真心坑了我好久,先是扩展欧几里得不清楚,再是写好后交了好多次都是WA,纠结了好久。然后用大数据测了,最后尽然有负数,我惊呆了,怎么找也找不出原因。

最后在网上看了别人的代码,真心觉得自己真.......b明明可以是负的不是吗?你再加上不还是负的吗=_=

代码如下:

#include<stdio.h>#include<cstring>#include<stdlib.h>#include<iostream>__int64 gcd(__int64 x,__int64 y)//求gcd{while(y!=0){__int64 t=x%y;x=y;y=t;}return x;}void ex_euclid(__int64 a,__int64 b,__int64 &x,__int64 &y){if(b==0){x=1;y=0;return ;}else  ex_euclid(b,a%b,x,y);__int64 t=x;x=y;y=t-a/b*y;}int main(){__int64 x,y,m,n,l;//freopen("in.txt","r",stdin);//freopen("out1.txt","w",stdout);while(scanf("%I64d%I64d%I64d%I64d%I64d",&x,&y,&m,&n,&l)==5){__int64 a,b,c,p,q;__int64 g=gcd(n-m,l);if((x-y)%g)printf("Impossible\n");else {a=(n-m)/g;b=l/g;c=(x-y)/g;ex_euclid(a,b,p,q);     __int64 t=-c*p/b;//x=c*p+b*t;令x=0,求出t              p=c*p+t*b;              if(p<=0)p+=abs(b);//因为g%l可能是负数,为了保证p为正,再加上b的绝对值(abs函数在stdlib.h里,为整数的绝对值)              printf("%I64d\n",p);}}return 0;}


0 0