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 |
Re:二十几次了,还是错误,哪位大侠帮忙看看(G++)In Reply To:二十几次了,还是错误,哪位大侠帮忙看看(G++) Posted by:richardlee at 2008-03-18 21:27:25 #include <stdio.h> __int64 x; __int64 y; __int64 m; __int64 n; __int64 L; __int64 times; bool caculate( __int64 pos, __int64 rate, __int64 L); bool doit( __int64 x, __int64 y, __int64 m, __int64 n, __int64 L) { __int64 rate; __int64 pos; if(x==y ||x <0||y <0|| x>= 2000000000|| y>= 2000000000|| m>= 2000000000|| n>= 2000000000|| L>= 2100000000|| m <=0 || n <=0 || m==n || L <=0) { return false; } x%=L; y%=L; if(x==y) { return false; } m%=L; n%=L; if(m==n) { return false; } if(m>n) // A的速度快 { rate=m-n; if(y>x) { pos=y-x; } else { pos=y+L-x; } } else { rate=n-m; if(x>y) { pos=x-y; } else { pos=x+L-y; } } if(rate>L/2) //从末端来追,可以减少循环的次数 { return caculate(L-pos,L-rate,L); } else { return caculate(pos,rate,L); } } bool caculate( __int64 pos, __int64 rate, __int64 L) { if(L%2==0 && pos%2==1 && rate%2==0) { return false; } if(pos%rate!=0 && L%rate==0) { return false; } __int64 c=pos%rate; __int64 d = pos; __int64 e=d%rate; while(e!= 0) { d += L; e=d%rate; if(e==c) { return false; } } times = d/rate; return true; } int main(void) { scanf("%d %d %d %d %d",&x, &y, &m, &n, &L); if( doit( x, y, m, n, L)) { printf("%ld\n",times); } else { printf("Impossible\n"); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator