| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
今天怎么那么多人做这题啊?In Reply To:为什么我的程序超时 Posted by:jsjhoubo at 2007-01-16 23:32:30 > #include<stdio.h>
> #include<stdlib.h>
> #include<math.h>
> #define stacksize 50
> struct euclid
> {
> long double d;
> long double x;
> long double y;
> } eu;
> long double mod(long double a,long double b)
> {
> long double q=floor(a/b);
> q=a-q*b;
> while(q<0) q+=b;
> while(q>=b) q-=b;
> return q;
> }
> struct euclid gcd(long double x,long double y)
> {
> struct euclid eu1,eu2;
> if(y==0)
> {
> eu1.d=x;
> eu1.x=1;
> eu1.y=0;
> return eu1;
> }
> else eu1=gcd(y,floor(mod(x,y)));
> eu2.d=eu1.d;
> eu2.x=eu1.y;
> eu2.y=eu1.x-floor(x/y)*eu1.y;
> return eu2;
> }
>
> int main()
> {
> long double x,y,m,n,L,t,q,min,temp;
> __int64 i;
> scanf("%lf %lf %lf %lf %lf",&x,&y,&m,&n,&L);
> if(x<0) x=x+L;
> if(y<0) y=y+L;
> if(m==n&&x!=y)
> {
> printf("Impossible");
> return 0;
> }
> if((m-n<0)) t=m-n+L;
> else t=m-n;
> eu=gcd(t,L);
> if(eu.d!=t*eu.x+L*eu.y)
> {
> temp=eu.x;
> eu.x=eu.y;
> eu.y=temp;
> }
> if((y-x)<0) t=y-x+L;
> else t=y-x;
> if(mod(t,eu.d)!=0)
> {
> printf("Impossible");
> return 0;
> }
> t=mod((eu.x*(t/eu.d)),L);
> i=0;
> q=t;
> min=q;
> while(i<=eu.d)
> {
> q=mod((t+(i*(L/eu.d))),L);
> if(min>q) min=q;
> i++;
> }
> i=(__int64)floor(min);
> printf("%ld\n",i);
> system("pause");
> return 0;
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator