結果
問題 |
No.1707 Simple Range Reverse Problem
|
ユーザー |
![]() |
提出日時 | 2025-06-30 22:30:42 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 48 ms / 2,000 ms |
コード長 | 1,763 bytes |
コンパイル時間 | 185 ms |
コンパイル使用メモリ | 82,364 KB |
実行使用メモリ | 61,252 KB |
最終ジャッジ日時 | 2025-07-13 03:54:40 |
合計ジャッジ時間 | 1,893 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 19 |
ソースコード
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 # right 以降、順番どおりか? memo = 1 flag1 = True for i in range(right + 1, 2*N): if (X + memo)%N == A[i]: memo += 1 continue else: flag1 = False break # left ~ right の間(両端は含まない)に注目 # right から遡る memo = 1 flag2 = True for i in range(right - 1, left, -1): if (X + memo)%N == A[i]: memo += 1 continue else: # 合わない flag2 = False break if flag1 and flag2: ansl.append('Yes') else: ansl.append('No') print(*ansl, sep='\n')