codeforces 761B

一个环  n个点 环长度为l

然后给你两行

每个人到这n个点的距离 逆时针

求出相邻两个点之间的距离

有一点小问题的是开始和结束 

然后我把一个数组 复制了一边到后面

然后暴力匹配一下

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<set>
#include<string>

using namespace std;
typedef long long LL;

#define MAXN 55
int ind1[MAXN],ind2[MAXN];
int num1[MAXN],num2[MAXN];

int main()
{
    int n,l;
    while(scanf("%d%d",&n,&l)!=EOF)
    {
        for(int i=0;i<n;i++)
            scanf("%d",&ind1[i]);
        for(int i=0;i<n;i++)
            scanf("%d",&ind2[i]);
        if(n==1)
            printf("YES\n");
        else
        {
            num1[0]=ind1[0]+l-ind1[n-1];
            num2[0]=ind2[0]+l-ind2[n-1];
            for(int i=1;i<n;i++)
            {
                num1[i]=ind1[i]-ind1[i-1];
                num2[i]=ind2[i]-ind2[i-1];
            }
            for(int i=n;i<=2*n-1;i++)
                num1[i]=num1[i-n];
            int ok=0;

            for(int i=0;i<=n-1;i++)
            {
                int j;
                for(j=0;j<n;j++)
                    if(num1[i+j]!=num2[j])
                        break;
                if(j==n)
                    ok=1;
            }
            if(ok==1)
                printf("YES\n");
            else
                printf("NO\n");
        }
    }
    return 0;
}

 

posted on 2017-02-21 20:22  HelloWorld!--By-MJY  阅读(188)  评论(0编辑  收藏  举报

导航