結果
問題 | No.929 よくあるボールを移動するやつ |
ユーザー |
![]() |
提出日時 | 2025-03-20 21:18:15 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 96 ms / 2,000 ms |
コード長 | 648 bytes |
コンパイル時間 | 147 ms |
コンパイル使用メモリ | 82,328 KB |
実行使用メモリ | 103,440 KB |
最終ジャッジ日時 | 2025-03-20 21:19:23 |
合計ジャッジ時間 | 1,772 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 12 |
ソースコード
n = int(input()) b = list(map(int, input().split())) surplus = [] deficit = [] for i in range(n): diff = b[i] - 1 if diff > 0: surplus.append([i, diff]) elif diff < 0: deficit.append([i, -diff]) surplus.sort() deficit.sort() s_idx = d_idx = 0 ans = 0 while s_idx < len(surplus) and d_idx < len(deficit): s_pos, s_cnt = surplus[s_idx] d_pos, d_cnt = deficit[d_idx] t = min(s_cnt, d_cnt) ans += t * abs(s_pos - d_pos) if s_cnt == t: s_idx += 1 else: surplus[s_idx][1] = s_cnt - t if d_cnt == t: d_idx += 1 else: deficit[d_idx][1] = d_cnt - t print(ans)