题意:有两只青蛙同时同步绕圈跳,其中一只青蛙起点为x,步长为m,另一只起点为y,步长为n,圈的周长为L,问你他们是否能够相遇,要跳几步。
解题思路:扩展欧几里得 http://zh.wikipedia.org/zh-cn/%E6%89%A9%E5%B1%95%E6%AC%A7%E5%87%A0%E9%87%8C%E5%BE%97%E7%AE%97%E6%B3%95
解题代码:
1 #include <stdio.h> 2 #include <string.h> 3 #include <math.h> 4 __int64 extgcd(__int64 a, __int64 b, __int64 &x, __int64 &y) 5 { 6 __int64 d, t; 7 if (b == 0) { x = 1; y = 0; return a; } 8 d = extgcd(b, a % b, x, y); 9 t = x - a/b*y; x = y; y = t; 10 return d; 11 } 12 int main() 13 { 14 __int64 x,y,m,n,l; 15 while(scanf("%I64d %I64d %I64d %I64d %I64d",&x,&y,&m,&n,&l) != EOF) 16 { 17 __int64 X,Y; 18 __int64 d = extgcd((n-m),l,X,Y); 19 if((y-x) % d != 0 ) 20 { 21 printf("Impossible\n"); 22 }else{ 23 __int64 r = l/d; 24 printf("%I64d\n",((x-y)/d*X%r + r )%r); 25 } 26 27 } 28 29 return 0; 30 }