A. Circle of Students     

题目:https://codeforces.com/contest/1203/problem/A

题意:一堆人坐成一个环,问能否按逆时针或者顺时针正好是 1-n的顺序

思路:水题,把数组开两倍,或者标记当前位置都可以

#include<bits/stdc++.h>
#define maxn 100005
#define mod 1000000007
using namespace std;
typedef long long ll;
int a[maxn],n;
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        scanf("%d",&n);
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        int dex=0;
        for(int i=1;i<=n;i++){
            if(a[i]==1){
                dex=i;
                break;
            }
        }
        int flag=0;
        int k=dex;
        int z=1,num=1;
        while(num<n){
            k++;
            if(k==n+1) k=1;
            if(a[k]!=z+1) break;
            num++;
            z++;
        }
        if(num==n) flag=1;
        //printf("num=%d k=%d z=%d\n",num,k,z);
        k=dex;
        z=1,num=1;
        while(num<n){
            k--;
            if(k==0) k=n;
            if(a[k]!=z+1) break;
            num++;
            z++;
        }
        if(num==n) flag=1;
        if(flag) printf("YES\n");
        else printf("NO\n");
    }
}
View Code

相关文章: