https://vjudge.net/problem/CodeForces-761B
题意:
有一个圆形跑道,上面有若干个障碍,分别给出两个人距离障碍的距离,问这两个人是否是在同一个跑道上跑步(我是这么理解的,障碍的相对位置相同,那么他们就在同一个跑道上)。
思路:
根据距离计算出障碍之间的距离,然后算两个跑道的距离序列是否一样,当然会有偏移的量,这个时候枚举偏移量就可以了。orz,赛上的时候就是定了一个相同位置就是偏移量在,真是sb。
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std; int main()
{
int a[],b[]; int n,l; scanf("%d%d",&n,&l); for (int i = ;i < n;i++)
scanf("%d",&a[i]); for (int i = ;i < n;i++)
scanf("%d",&b[i]); int c[],d[]; if (n == )
{
printf("YES\n"); return ;
} for (int i = ;i < n - ;i++)
c[i] = a[i + ] - a[i]; c[n-] = l - (a[n-] - a[]); for (int i = ;i < n - ;i++)
d[i] = b[i+] - b[i]; d[n-] = l - (b[n-] - b[]); int f = ; for (int i = ;i < n;i++)
{
for (int j = ;j < n;j++)
{
if (c[j] != d[(i+j)%n]) break; if (j == n - )
{
f = ;
}
} if (f) break;
} if (f) printf("YES\n");
else printf("NO\n"); return ;
}