【問題】
D - Integer Cards
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
【方針】\(C_j\)を大きい順に\(B_j\)個並べたリストを作る。このリストと\(A\)を結合し、大きい方から順に\(N\)個取れば良い。
【解答】
#input
n, m = map(int, input().split())
a = list(map(int, input().split()))
d = []
for i in range(m):
b, c = map(int, input().split())
d.append([b, c])
#output
d = sorted(d, key = lambda x:x[1], reverse = True)
counter = 0
e = []
for item in d:
counter += item[0]
e+= [item[1]]*item[0]
if counter >= n:
break
a += e
a = sorted(a, reverse = True)
print(sum(a[:n]))
【提出結果】
Submission #26250246 - AtCoder Beginner Contest 127
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
遅いと思ったけれどPythonの中ではなかなか早かったようだ。
コメント