一个环 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 "); 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 "); else printf("NO "); } } return 0; }