题目链接:
http://codeforces.com/problemset/problem/761/B
题解:
题目大意为:两个人在一个周长为l的圆里面进行比赛,这个圆里面有n个障碍物,每个人的起跑的位置不相同,因此他们距离障碍物的距离也不相同(这里规定他们的运动的方向均为逆时针),问这些障碍物的可不可能在相同的位置。
简单题,因为不管怎么变,相邻两个障碍物之间的距离是绝对的,不会发生变化的,因此,直接暴力比较距离就行了。 (这里需要注意:这里是圆,所以需要考虑头跟尾这个特殊的地方)
代码:
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define met(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
typedef long long ll;
const int maxn = 50+10;
int num[2][maxn];
int ans1[maxn];
int ans2[maxn];
int main()
{
int n,l;
while(cin>>n>>l)
{
met(ans1,0);
met(ans2,0);
for(int i=0;i<n;i++)
cin>>num[0][i];
for(int i=0;i<n;i++)
cin>>num[1][i];
for(int i=1;i<n;i++)
ans1[i]=num[0][i]-num[0][i-1];
ans1[0]=num[0][0]+l-num[0][n-1];
for(int i=1;i<n;i++)
ans2[i]=num[1][i]-num[1][i-1];
ans2[0]=num[1][0]+l-num[1][n-1];
int flag=0;
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(ans1[j]!=ans2[(i+j)%n])
break;
}
if(j==n)
{
flag=1;
break;
}
}
if(flag)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
}