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 }