結果
| 問題 | No.3656 Game Scores and Costs |
| コンテスト | |
| ユーザー |
sepa38
|
| 提出日時 | 2026-08-27 13:22:39 |
| 言語 | PyPy3 (7.3.23) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,550 bytes |
| 記録 | |
| コンパイル時間 | 263 ms |
| コンパイル使用メモリ | 95,860 KB |
| 実行使用メモリ | 130,560 KB |
| 最終ジャッジ日時 | 2026-08-30 13:04:13 |
| 合計ジャッジ時間 | 4,457 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge3_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 16 WA * 5 |
ソースコード
"""
[誤答] f(i) が負になった時点で打ち切る解法
「赤字になったらそこでやめるべき」という誤った枝刈り。
f(i) が負でも、その後に大きな A_i が来れば黒字に転じる。
(そもそも答え自体が負になりうる問題なので、負を「打ち切り条件」にしてはいけない)
"""
import heapq
import sys
def main():
data = sys.stdin.buffer.read().split()
n, k, x = int(data[0]), int(data[1]), int(data[2])
a = list(map(int, data[3:3 + n]))
heap = []
s = 0
ans = -(1 << 62)
for i in range(1, n + 1):
v = a[i - 1]
if len(heap) < k:
heapq.heappush(heap, v)
s += v
elif v > heap[0]:
s += v - heapq.heapreplace(heap, v)
cur = s - x * i
ans = max(ans, cur)
if cur < 0: # BUG: 赤字でも続ける価値がある
break
print(ans)
main()
# ============================================================
# Hack ケース
# ------------------------------------------------------------
# サンプル: 3問すべて通過する(危険)
#
# 入力:
# 2 1 1
# 0 1000000000
#
# 想定解の出力: 999999998 (f(1) = -1, f(2) = 10^9 - 2)
# この解法の出力: -1
#
# 理由: 先頭を 0(または X 未満)にして f(1) < 0 にし、後ろに最大値を置く。
# A_1 = 0 は制約の下限でもあるので、テストケースとして自然に混ぜられる。
# ============================================================
sepa38