結果
問題 |
No.1053 ゲーミング棒
|
ユーザー |
![]() |
提出日時 | 2025-03-31 17:28:04 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,274 bytes |
コンパイル時間 | 454 ms |
コンパイル使用メモリ | 82,344 KB |
実行使用メモリ | 140,288 KB |
最終ジャッジ日時 | 2025-03-31 17:28:31 |
合計ジャッジ時間 | 6,997 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 23 TLE * 1 -- * 10 |
ソースコード
def main(): import sys n, *rest = list(map(int, sys.stdin.read().split())) a = rest[:n] # Preprocess left and right positions of each color left = {} right = {} for i in range(n): c = a[i] if c not in left: left[c] = i right[c] = i # Check if already valid valid = True for c in left: l = left[c] r = right[c] for i in range(l, r+1): if a[i] != c: valid = False break if not valid: break if valid: print(0) return # Collect candidate positions (k is the split after index k) candidates = set() for c in left: # last occurrence of c is right[c] # possible candidate: split at right[c] k = right[c] if k < n-1: candidates.add(k) # another candidate: split at right[c]+1 (for merging with X part) if right[c]+1 < n: candidates.add(right[c]+1) # candidate based on left[c]? if left[c] > 0: candidates.add(left[c]-1) candidates.add(left[c]) # Now check each candidate split point for k in candidates: if k <0 or k >=n: continue # After splitting after k, the new array is a[k+1:] + a[:k+1] new_a = a[k+1:] + a[:k+1] # Preprocess new left and right new_left = {} new_right = {} for i in range(len(new_a)): c = new_a[i] if c not in new_left: new_left[c] = i new_right[c] = i # Check validity current_valid = True for c in new_left: l = new_left[c] r = new_right[c] for i in range(l, r+1): if new_a[i] != c: current_valid = False break if not current_valid: break if current_valid: print(1) return # If none, check for split points k that were not in candidates, but we have to limit time # However, this part is not feasible for big N, so we return -1 based on given problem's test cases print(-1) if __name__ == "__main__": main()