提出 #70290449
ソースコード 拡げる
import sys
from typing import List, Tuple
# ---------------------------------------
# Heuristic:
# 1) Choose "primer" chest p maximizing avg_topCi = sum_top_Ci(A[p,*]) / C[p]
# 2) Open p by hand (Wi = -1)
# 3) While unopened remains:
# - Among available weapons (remaining durability>0), pick (w,b) with max A[w][b]
# - If max_damage <= 1 -> hand on the softest remaining chest
# - Apply; when a chest opens, its weapon becomes available
# ---------------------------------------
def choose_primer(N: int, H: List[int], C: List[int], A: List[List[int]]) -> int:
best = (-1.0, -10**9, -1) # (score, -H[i], -i) -> prefer high score, then small H
for i in range(N):
ci = C[i]
if ci <= 0:
score = 0.0
else:
row = A[i][:]
row.sort(reverse=True)
score = sum(row[:ci]) / ci
cand = (score, -H[i], -i)
if cand > best:
best = cand
return -best[2]
def main():
data = sys.stdin.read().strip().split()
it = iter(data)
try:
N = int(next(it))
except StopIteration:
return
H = [int(next(it)) for _ in range(N)]
C = [int(next(it)) for _ in range(N)]
A = [[int(next(it)) for _ in range(N)] for _ in range(N)]
# Remaining hardness; track opened
remH = H[:]
opened = [False]*N
# Weapons: remaining durability; only usable after chest opened
remC = [0]*N
actions: List[Tuple[int, int]] = []
# 1) choose primer and open by hand
primer = choose_primer(N, remH, C, A)
# open by hand
while remH[primer] > 0:
remH[primer] -= 1
actions.append((-1, primer))
opened[primer] = True
remC[primer] = C[primer]
# 2) loop until all opened
unopened_count = opened.count(False)
while unopened_count > 0:
# find best weapon attack
best_w, best_b, best_damage = -1, -1, 0
for w in range(N):
if remC[w] <= 0:
continue
# try all unopened boxes
# prefer harder box when tie on damage
for b in range(N):
if remH[b] <= 0:
continue
dmg = A[w][b]
if dmg > best_damage or (dmg == best_damage and remH[b] > (remH[best_b] if best_b != -1 else -1)):
best_damage = dmg
best_w, best_b = w, b
if best_damage <= 1:
# hand attack: hit the softest remaining box
target = -1
best_h = 10**9
for b in range(N):
if 0 < remH[b] < best_h:
best_h = remH[b]
target = b
# safety
if target == -1:
break
remH[target] -= 1
actions.append((-1, target))
if remH[target] <= 0 and not opened[target]:
opened[target] = True
remC[target] = C[target]
unopened_count -= 1
else:
# use weapon
remH[best_b] -= best_damage
remC[best_w] -= 1
actions.append((best_w, best_b))
if remH[best_b] <= 0 and not opened[best_b]:
opened[best_b] = True
remC[best_b] = C[best_b]
unopened_count -= 1
# 出力
print(len(actions))
for w, b in actions:
print(w, b)
if __name__ == "__main__":
main()
提出情報
| 提出日時 | |
|---|---|
| 問題 | A - Weakpoint |
| ユーザ | shaptel |
| 言語 | Python (PyPy 3.10-v7.3.12) |
| 得点 | 0 |
| コード長 | 3537 Byte |
| 結果 | WA |
| 実行時間 | 171 ms |
| メモリ | 90780 KiB |
ジャッジ結果
| セット名 | test_ALL | ||
|---|---|---|---|
| 得点 / 配点 | 0 / 15000000 | ||
| 結果 |
|
| セット名 | テストケース |
|---|---|
| test_ALL | test_0000.txt, test_0001.txt, test_0002.txt, test_0003.txt, test_0004.txt, test_0005.txt, test_0006.txt, test_0007.txt, test_0008.txt, test_0009.txt, test_0010.txt, test_0011.txt, test_0012.txt, test_0013.txt, test_0014.txt, test_0015.txt, test_0016.txt, test_0017.txt, test_0018.txt, test_0019.txt, test_0020.txt, test_0021.txt, test_0022.txt, test_0023.txt, test_0024.txt, test_0025.txt, test_0026.txt, test_0027.txt, test_0028.txt, test_0029.txt, test_0030.txt, test_0031.txt, test_0032.txt, test_0033.txt, test_0034.txt, test_0035.txt, test_0036.txt, test_0037.txt, test_0038.txt, test_0039.txt, test_0040.txt, test_0041.txt, test_0042.txt, test_0043.txt, test_0044.txt, test_0045.txt, test_0046.txt, test_0047.txt, test_0048.txt, test_0049.txt, test_0050.txt, test_0051.txt, test_0052.txt, test_0053.txt, test_0054.txt, test_0055.txt, test_0056.txt, test_0057.txt, test_0058.txt, test_0059.txt, test_0060.txt, test_0061.txt, test_0062.txt, test_0063.txt, test_0064.txt, test_0065.txt, test_0066.txt, test_0067.txt, test_0068.txt, test_0069.txt, test_0070.txt, test_0071.txt, test_0072.txt, test_0073.txt, test_0074.txt, test_0075.txt, test_0076.txt, test_0077.txt, test_0078.txt, test_0079.txt, test_0080.txt, test_0081.txt, test_0082.txt, test_0083.txt, test_0084.txt, test_0085.txt, test_0086.txt, test_0087.txt, test_0088.txt, test_0089.txt, test_0090.txt, test_0091.txt, test_0092.txt, test_0093.txt, test_0094.txt, test_0095.txt, test_0096.txt, test_0097.txt, test_0098.txt, test_0099.txt, test_0100.txt, test_0101.txt, test_0102.txt, test_0103.txt, test_0104.txt, test_0105.txt, test_0106.txt, test_0107.txt, test_0108.txt, test_0109.txt, test_0110.txt, test_0111.txt, test_0112.txt, test_0113.txt, test_0114.txt, test_0115.txt, test_0116.txt, test_0117.txt, test_0118.txt, test_0119.txt, test_0120.txt, test_0121.txt, test_0122.txt, test_0123.txt, test_0124.txt, test_0125.txt, test_0126.txt, test_0127.txt, test_0128.txt, test_0129.txt, test_0130.txt, test_0131.txt, test_0132.txt, test_0133.txt, test_0134.txt, test_0135.txt, test_0136.txt, test_0137.txt, test_0138.txt, test_0139.txt, test_0140.txt, test_0141.txt, test_0142.txt, test_0143.txt, test_0144.txt, test_0145.txt, test_0146.txt, test_0147.txt, test_0148.txt, test_0149.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| test_0000.txt | WA | 153 ms | 90300 KiB |
| test_0001.txt | WA | 160 ms | 90324 KiB |
| test_0002.txt | WA | 158 ms | 90288 KiB |
| test_0003.txt | WA | 157 ms | 90496 KiB |
| test_0004.txt | WA | 160 ms | 90056 KiB |
| test_0005.txt | WA | 161 ms | 90224 KiB |
| test_0006.txt | WA | 163 ms | 90288 KiB |
| test_0007.txt | WA | 158 ms | 90336 KiB |
| test_0008.txt | WA | 165 ms | 90408 KiB |
| test_0009.txt | WA | 166 ms | 90400 KiB |
| test_0010.txt | WA | 159 ms | 90272 KiB |
| test_0011.txt | WA | 155 ms | 90416 KiB |
| test_0012.txt | WA | 161 ms | 90380 KiB |
| test_0013.txt | WA | 158 ms | 90380 KiB |
| test_0014.txt | WA | 161 ms | 90192 KiB |
| test_0015.txt | WA | 155 ms | 90576 KiB |
| test_0016.txt | WA | 154 ms | 90604 KiB |
| test_0017.txt | WA | 165 ms | 90128 KiB |
| test_0018.txt | WA | 157 ms | 90616 KiB |
| test_0019.txt | WA | 154 ms | 90124 KiB |
| test_0020.txt | WA | 167 ms | 90492 KiB |
| test_0021.txt | WA | 156 ms | 90400 KiB |
| test_0022.txt | WA | 153 ms | 90420 KiB |
| test_0023.txt | WA | 156 ms | 90464 KiB |
| test_0024.txt | WA | 159 ms | 90448 KiB |
| test_0025.txt | WA | 155 ms | 90104 KiB |
| test_0026.txt | WA | 157 ms | 90564 KiB |
| test_0027.txt | WA | 154 ms | 90412 KiB |
| test_0028.txt | WA | 156 ms | 90240 KiB |
| test_0029.txt | WA | 158 ms | 90404 KiB |
| test_0030.txt | WA | 158 ms | 90248 KiB |
| test_0031.txt | WA | 155 ms | 90128 KiB |
| test_0032.txt | WA | 159 ms | 90104 KiB |
| test_0033.txt | WA | 158 ms | 90180 KiB |
| test_0034.txt | WA | 155 ms | 90512 KiB |
| test_0035.txt | WA | 161 ms | 90512 KiB |
| test_0036.txt | WA | 158 ms | 90504 KiB |
| test_0037.txt | WA | 158 ms | 90488 KiB |
| test_0038.txt | WA | 157 ms | 90060 KiB |
| test_0039.txt | WA | 168 ms | 90176 KiB |
| test_0040.txt | WA | 161 ms | 90280 KiB |
| test_0041.txt | WA | 158 ms | 90452 KiB |
| test_0042.txt | WA | 156 ms | 90456 KiB |
| test_0043.txt | WA | 158 ms | 90640 KiB |
| test_0044.txt | WA | 159 ms | 90340 KiB |
| test_0045.txt | WA | 158 ms | 90356 KiB |
| test_0046.txt | WA | 154 ms | 90284 KiB |
| test_0047.txt | WA | 164 ms | 90172 KiB |
| test_0048.txt | WA | 158 ms | 90360 KiB |
| test_0049.txt | WA | 159 ms | 90592 KiB |
| test_0050.txt | WA | 159 ms | 90196 KiB |
| test_0051.txt | WA | 158 ms | 90284 KiB |
| test_0052.txt | WA | 162 ms | 89988 KiB |
| test_0053.txt | WA | 161 ms | 90568 KiB |
| test_0054.txt | WA | 164 ms | 90464 KiB |
| test_0055.txt | WA | 161 ms | 90500 KiB |
| test_0056.txt | WA | 158 ms | 90384 KiB |
| test_0057.txt | WA | 162 ms | 90276 KiB |
| test_0058.txt | WA | 159 ms | 90480 KiB |
| test_0059.txt | WA | 162 ms | 90260 KiB |
| test_0060.txt | WA | 168 ms | 90560 KiB |
| test_0061.txt | WA | 162 ms | 90412 KiB |
| test_0062.txt | WA | 160 ms | 90520 KiB |
| test_0063.txt | WA | 162 ms | 90556 KiB |
| test_0064.txt | WA | 165 ms | 90288 KiB |
| test_0065.txt | WA | 166 ms | 90192 KiB |
| test_0066.txt | WA | 159 ms | 90432 KiB |
| test_0067.txt | WA | 165 ms | 90428 KiB |
| test_0068.txt | WA | 156 ms | 90412 KiB |
| test_0069.txt | WA | 164 ms | 90476 KiB |
| test_0070.txt | WA | 159 ms | 90376 KiB |
| test_0071.txt | WA | 161 ms | 90460 KiB |
| test_0072.txt | WA | 159 ms | 90232 KiB |
| test_0073.txt | WA | 159 ms | 90396 KiB |
| test_0074.txt | WA | 160 ms | 90472 KiB |
| test_0075.txt | WA | 158 ms | 90400 KiB |
| test_0076.txt | WA | 157 ms | 90120 KiB |
| test_0077.txt | WA | 156 ms | 90152 KiB |
| test_0078.txt | WA | 164 ms | 90336 KiB |
| test_0079.txt | WA | 161 ms | 90484 KiB |
| test_0080.txt | WA | 168 ms | 90428 KiB |
| test_0081.txt | WA | 156 ms | 90588 KiB |
| test_0082.txt | WA | 168 ms | 89916 KiB |
| test_0083.txt | WA | 159 ms | 90152 KiB |
| test_0084.txt | WA | 158 ms | 90192 KiB |
| test_0085.txt | WA | 163 ms | 90528 KiB |
| test_0086.txt | WA | 158 ms | 90016 KiB |
| test_0087.txt | WA | 162 ms | 90652 KiB |
| test_0088.txt | WA | 162 ms | 90284 KiB |
| test_0089.txt | WA | 163 ms | 90228 KiB |
| test_0090.txt | WA | 158 ms | 90304 KiB |
| test_0091.txt | WA | 158 ms | 90276 KiB |
| test_0092.txt | WA | 165 ms | 90244 KiB |
| test_0093.txt | WA | 160 ms | 90396 KiB |
| test_0094.txt | WA | 160 ms | 90520 KiB |
| test_0095.txt | WA | 159 ms | 90312 KiB |
| test_0096.txt | WA | 163 ms | 90780 KiB |
| test_0097.txt | WA | 157 ms | 90432 KiB |
| test_0098.txt | WA | 155 ms | 90000 KiB |
| test_0099.txt | WA | 165 ms | 90384 KiB |
| test_0100.txt | WA | 158 ms | 90600 KiB |
| test_0101.txt | WA | 160 ms | 90344 KiB |
| test_0102.txt | WA | 162 ms | 90464 KiB |
| test_0103.txt | WA | 156 ms | 90456 KiB |
| test_0104.txt | WA | 158 ms | 90660 KiB |
| test_0105.txt | WA | 163 ms | 90432 KiB |
| test_0106.txt | WA | 160 ms | 90500 KiB |
| test_0107.txt | WA | 166 ms | 90276 KiB |
| test_0108.txt | WA | 164 ms | 90432 KiB |
| test_0109.txt | WA | 170 ms | 90576 KiB |
| test_0110.txt | WA | 164 ms | 90196 KiB |
| test_0111.txt | WA | 163 ms | 90264 KiB |
| test_0112.txt | WA | 160 ms | 90500 KiB |
| test_0113.txt | WA | 158 ms | 90216 KiB |
| test_0114.txt | WA | 156 ms | 89976 KiB |
| test_0115.txt | WA | 160 ms | 90600 KiB |
| test_0116.txt | WA | 165 ms | 90176 KiB |
| test_0117.txt | WA | 162 ms | 89984 KiB |
| test_0118.txt | WA | 161 ms | 90368 KiB |
| test_0119.txt | WA | 165 ms | 90548 KiB |
| test_0120.txt | WA | 162 ms | 90384 KiB |
| test_0121.txt | WA | 159 ms | 90612 KiB |
| test_0122.txt | WA | 161 ms | 90208 KiB |
| test_0123.txt | WA | 159 ms | 90676 KiB |
| test_0124.txt | WA | 158 ms | 90208 KiB |
| test_0125.txt | WA | 162 ms | 90072 KiB |
| test_0126.txt | WA | 158 ms | 90300 KiB |
| test_0127.txt | WA | 161 ms | 90016 KiB |
| test_0128.txt | WA | 158 ms | 90488 KiB |
| test_0129.txt | WA | 171 ms | 90460 KiB |
| test_0130.txt | WA | 161 ms | 90364 KiB |
| test_0131.txt | WA | 157 ms | 90100 KiB |
| test_0132.txt | WA | 163 ms | 90064 KiB |
| test_0133.txt | WA | 156 ms | 90100 KiB |
| test_0134.txt | WA | 157 ms | 90468 KiB |
| test_0135.txt | WA | 159 ms | 90568 KiB |
| test_0136.txt | WA | 159 ms | 90412 KiB |
| test_0137.txt | WA | 158 ms | 90360 KiB |
| test_0138.txt | WA | 158 ms | 90376 KiB |
| test_0139.txt | WA | 159 ms | 90176 KiB |
| test_0140.txt | WA | 160 ms | 90488 KiB |
| test_0141.txt | WA | 169 ms | 90296 KiB |
| test_0142.txt | WA | 165 ms | 90232 KiB |
| test_0143.txt | WA | 162 ms | 90516 KiB |
| test_0144.txt | WA | 156 ms | 90564 KiB |
| test_0145.txt | WA | 159 ms | 90356 KiB |
| test_0146.txt | WA | 157 ms | 90548 KiB |
| test_0147.txt | WA | 158 ms | 90244 KiB |
| test_0148.txt | WA | 159 ms | 90380 KiB |
| test_0149.txt | WA | 160 ms | 90576 KiB |