Circle of Students (Codeforces 1203A)
Tags: Implement, implementation

There are $$$n$$$ students standing in a circle in some order. The index of the $$$i$$$-th student is $$$p_i$$$. It is guaranteed that all indices of students are distinct integers from $$$1$$$ to $$$n$$$ (i. e. they form a permutation).Students want to start a round dance. A clockwise round dance can be started if the student $$$2$$$ comes right after the student $$$1$$$ in clockwise order (there are no students between them), the student $$$3$$$ comes right after the student $$$2$$$ in clockwise order, and so on, and the student $$$n$$$ comes right after the student $$$n - 1$$$ in clockwise order. A counterclockwise round dance is almost the same thing — the only difference is that the student $$$i$$$ should be right after the student $$$i - 1$$$ in counterclockwise order (this condition should be met for every $$$i$$$ from $$$2$$$ to $$$n$$$). For example, if the indices of students listed in clockwise order are $$$[2, 3, 4, 5, 1]$$$, then they can start a clockwise round dance. If the students have indices $$$[3, 2, 1, 4]$$$ in clockwise order, then they can start a counterclockwise round dance.Your task is to determine whether it is possible to start a round dance. Note that the students cannot change their positions before starting the dance; they cannot swap or leave the circle, and no other student can enter the circle. You have to answer $$$q$$$ independent queries.

Input: The first line of the input contains one integer $$$q$$$ ($$$1 \le q \le 200$$$) — the number of queries. Then $$$q$$$ queries follow.The first line of the query contains one integer $$$n$$$ ($$$1 \le n \le 200$$$) — the number of students.The second line of the query contains a permutation of indices $$$p_1, p_2, \dots, p_n$$$ ($$$1 \le p_i \le n$$$), where $$$p_i$$$ is the index of the $$$i$$$-th student (in clockwise order). It is guaranteed that all $$$p_i$$$ are distinct integers from $$$1$$$ to $$$n$$$ (i. e. they form a permutation).

Output: For each query, print the answer on it. If a round dance can be started with the given order of students, print "YES". Otherwise print "NO".


Sample Inputs:
5
4
1 2 3 4
3
1 3 2
5
1 2 3 5 4
1
1
5
3 2 1 5 4

Sample Outputs:
YES
YES
NO
YES
YES

Solution (Python):
a = int(input())
for i in range(a):
    result = 'YES'
    b = int(input())
    c = [int(i) for i in input().split()]
    for i in range(0, b - 1):
        if abs(c[i] - c[i + 1]) != 1 and abs(c[i] - c[i + 1]) != b - 1:
            result = 'NO'
            break
    print(result)

Solution (Python):
import sys
test = int(input())
for t in range(test):
    n = int(input())
    a = list(map(int, sys.stdin.readline().split()))
    b = False
    g = False
    if n == 1:
        print('YES')
    else:
        for i in range(0, n):
            if i == 0:
                y = n - 1
            else:
                y = i - 1
            if abs(a[i] - a[y]) > 1:
                if b:
                    print('NO')
                    g = True
                    break
                else:
                    b = True
        if not g:
            print('YES')

Solution (Python):
import sys
input = sys.stdin.readline
for _ in range(int(input())):
    n = int(input())
    w = list(map(int, input().split()))
    (c, x) = (0, 0)
    if n == 1:
        print('YES')
    else:
        x = w.index(1)
        if x == 0:
            if w[1] - w[0] > 0 and w[1] != n:
                c = 1
            else:
                c = 0
        elif w[x - 1] - w[x] > 0 and w[x - 1] != n:
            c = 0
        else:
            c = 1
        if c == 1:
            d = list(range(n - x + 1, n + 1)) + list(range(1, n - x + 1))
        else:
            d = list(range(x + 1, 0, -1)) + list(range(n, x + 1, -1))
        if d == w:
            print('YES')
        else:
            print('NO')