結果

問題 No.1707 Simple Range Reverse Problem
ユーザー 学ぶマン
提出日時 2025-06-30 22:26:04
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,501 bytes
コンパイル時間 443 ms
コンパイル使用メモリ 82,344 KB
実行使用メモリ 62,200 KB
最終ジャッジ日時 2025-06-30 22:26:07
合計ジャッジ時間 2,331 ms
ジャッジサーバーID
(参考情報)
judge2 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 14 WA * 4
権限があれば一括ダウンロードができます

ソースコード

diff #

T = int(input())
ansl = []
for _ in range(T):
    N = int(input())
    A = list(map(lambda x: int(x) - 1, input().split()))

    if N == 1:
        if A == [0, 0]:
            ansl.append('Yes')
        else:
            ansl.append('No')
        continue

    if N == 2:
        if A == [0, 1, 0, 1]:
            ansl.append('Yes')
        else:
            ansl.append('No')
        continue

    cnt = [0]*N
    for a in A:
        cnt[a] += 1
    flag = True
    for i in range(N):
        if cnt[i] != 2:
            flag = False
            break
    if not flag:
        ansl.append('No')
        continue

    if A[0] != 0:
        ansl.append('No')
        continue

    # 前から見ていく
    flag = True
    for i in range(2*N):
        a = A[i]
        if i%N != a:
            left = i - 1
            flag = False
            break
    
    # 初期版と同じ
    if flag:
        ansl.append('Yes')
        continue

    X = A[left]
    # 後ろから見る
    for i in range(2*N - 1, -1, -1):
        if A[i] == X:
            right = i
            break
    # left ~ right の間(両端は含まない)に注目
    # right から遡る
    memo = 1
    flag = True
    for i in range(right - 1, left, -1):
        if (X + memo)%N == A[i]:
            memo += 1
            continue
        else:
            # 合わない
            flag = False
            break
    
    if flag:
        ansl.append('Yes')
    else:
        ansl.append('No')

print(*ansl, sep='\n')
0