提出 #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
結果
WA × 150
セット名 テストケース
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