761B Dasha and friends

来源:互联网 发布:js添加class样式 编辑:程序博客网 时间:2024/06/07 00:47

题目链接:

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 0x3f3f3f3ftypedef 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;    }}


0 0
原创粉丝点击