結果

問題 No.1708 Quality of Contest
ユーザー wgrapewgrape
提出日時 2024-11-07 16:46:44
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,825 bytes
コンパイル時間 169 ms
コンパイル使用メモリ 82,560 KB
実行使用メモリ 179,876 KB
最終ジャッジ日時 2024-11-07 16:46:59
合計ジャッジ時間 12,489 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 46 ms
54,272 KB
testcase_01 AC 47 ms
54,272 KB
testcase_02 AC 48 ms
54,400 KB
testcase_03 WA -
testcase_04 WA -
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 AC 49 ms
54,400 KB
testcase_09 AC 407 ms
179,876 KB
testcase_10 AC 406 ms
111,444 KB
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 WA -
testcase_16 WA -
testcase_17 WA -
testcase_18 WA -
testcase_19 WA -
testcase_20 WA -
testcase_21 WA -
testcase_22 WA -
testcase_23 WA -
testcase_24 AC 418 ms
118,260 KB
testcase_25 AC 452 ms
117,760 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

N,M,X = map(int,input().split())

from collections import defaultdict
dic = defaultdict(list) # 種類:値

for _ in range(N):
    a,b = map(int,input().split())
    dic[b].append(a)

# 各種類の最大のものを取り出し[値, 種類]で管理
# 値の順に取り出せるようにする
# 以降は「新しい種類を取り出す」と「既存の種類の最大値」の比較
tops = []
for key, value in dic.items():
    sval = sorted(value)
    tops.append([sval.pop(), key])
    if sval:
        dic[key] = sval

tops = sorted(tops, key = lambda x:x[0])

# 一方で、K人の管理

K = input()
C = list(map(int,input().split()))

S = [0] * (N + 1) # i問目まで解く人が何人いるか
for c in C:
    S[c] += 1
    
for i in range(N - 1, -1, -1):
    S[i] += S[i + 1]
    
ans = 0
import heapq as hq
q = []
# topsの末尾の問題を解いて、その値 + Xを得るか
# qの問題を解くか
for i in range(1, N + 1): # i問目を解く
    # S[i]人が解く
    if S[i] == 0:
        break
    base = 0
    if not tops: # topsが既に空の場合、qの先頭を解く
        val = hq.heappop(q)
        base -= val # 正負逆転
    elif not q: # qが空の場合、topsの先頭を解く
        p, kind = tops.pop()
        base += p + X # 種類のポイントを得る
        # 種類kindの値をすべてqに追加
        for point in dic[kind]:
            hq.heappush(q, -point) # 正負反転
    else: # topsもqも空ではない
        tops_point = tops[-1][0] + X
        q_point = q[0] * (-1)
        if tops_point > q_point:
            p, kind = tops.pop()
            base += p + X
            for point in dic[kind]:
                hq.heappush(q, -point)
        else:
            val = hq.heappop(q)
            base -= val
    ans += base * S[i]
print(ans)




    

0