結果
問題 |
No.1371 交換門松列・松
|
ユーザー |
![]() |
提出日時 | 2025-06-12 19:20:59 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,153 bytes |
コンパイル時間 | 167 ms |
コンパイル使用メモリ | 82,656 KB |
実行使用メモリ | 268,536 KB |
最終ジャッジ日時 | 2025-06-12 19:21:19 |
合計ジャッジ時間 | 7,329 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 15 TLE * 1 -- * 13 |
ソースコード
def main(): import sys input = sys.stdin.read data = input().split() N = int(data[0]) A = list(map(int, data[1:N+1])) # Precompute for each position if it's a peak or a valley is_peak = [False] * N is_valley = [False] * N for i in range(1, N-1): left = A[i-1] mid = A[i] right = A[i+1] if mid > left and mid > right: is_peak[i] = True elif mid < left and mid < right: is_valley[i] = True else: pass # Not a peak or valley valid = 0 for i in range(N): for j in range(i+1, N): # Check if swapping i and j keeps all triplets valid # We need to check all triplets involving i or j # Let's collect all such triplets affected = set() # For i if i-2 >=0: affected.add(i-2) if i-1 >=0: affected.add(i-1) affected.add(i) affected.add(i+1) if i+2 < N: affected.add(i+2) # For j if j-2 >=0: affected.add(j-2) if j-1 >=0: affected.add(j-1) affected.add(j) affected.add(j+1) if j+2 < N: affected.add(j+2) # Now, for each k in affected, check triplet (k-1, k, k+1) # But we need to check the new sequence after swap # Create a copy of the array after swap B = A.copy() B[i], B[j] = B[j], B[i] valid_swap = True for k in affected: if k-1 <0 or k+1 >= N: continue # Not a triplet a, b, c = B[k-1], B[k], B[k+1] if a == b or b == c or a == c: valid_swap = False break if not ((b > a and b > c) or (b < a and b < c)): valid_swap = False break if valid_swap: valid +=1 print(valid) if __name__ == "__main__": main()