题意:有两只青蛙同时同步绕圈跳,其中一只青蛙起点为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

解题代码:

POJ 1601 青蛙的约会(扩展欧几里得)_扩展欧几里得POJ 1601 青蛙的约会(扩展欧几里得)_POJ_02
 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 }
View Code