codeforces 761B Dasha and friends

https://vjudge.net/problem/CodeForces-761B

题意:

有一个圆形跑道,上面有若干个障碍,分别给出两个人距离障碍的距离,问这两个人是否是在同一个跑道上跑步(我是这么理解的,障碍的相对位置相同,那么他们就在同一个跑道上)。

思路:

根据距离计算出障碍之间的距离,然后算两个跑道的距离序列是否一样,当然会有偏移的量,这个时候枚举偏移量就可以了。orz,赛上的时候就是定了一个相同位置就是偏移量在,真是sb。

代码:

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <algorithm>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int a[55],b[55];
 9 
10     int n,l;
11 
12     scanf("%d%d",&n,&l);
13 
14     for (int i = 0;i < n;i++)
15         scanf("%d",&a[i]);
16 
17     for (int i = 0;i < n;i++)
18         scanf("%d",&b[i]);
19 
20     int c[55],d[55];
21 
22     if (n == 1)
23     {
24         printf("YES
");
25 
26         return 0;
27     }
28 
29     for (int i = 0;i < n - 1;i++)
30         c[i] = a[i + 1] - a[i];
31 
32     c[n-1] = l - (a[n-1] - a[0]);
33 
34     for (int i = 0;i < n - 1;i++)
35         d[i] = b[i+1] - b[i];
36 
37     d[n-1] = l - (b[n-1] - b[0]);
38 
39     int f = 0;
40 
41     for (int i = 0;i < n;i++)
42     {
43         for (int j = 0;j < n;j++)
44         {
45             if (c[j] != d[(i+j)%n]) break;
46 
47             if (j == n - 1)
48             {
49                 f = 1;
50             }
51         }
52 
53         if (f) break;
54     }
55 
56     if (f) printf("YES
");
57     else printf("NO
");
58 
59     return 0;
60 }
原文地址:https://www.cnblogs.com/kickit/p/7287089.html