【TLE3 解説放送閲覧後に実装直し】C - Variety

振り返り

  • 式変形が大事。インプットはアルゴリズムや離散数学の前に基礎的な代数から。具体的な知識は問題を解いた後に解説を見る
  • 色の[0]を先に取って印をつける発想を見て実装してみたがTLE
  • 式変形が大事。イミュータブルにしてライブラリを使う実装と違って、いかに使いやすい形で変形させるか。ループ内の実装レベルで小手先でやっても意味がないし安定しないと思われるのでデータ構造を整える
  • 発想を実装になかなか落とせなかったので慣れが必要。
  • あとこの問題に関して、そもそも全探索的なsortedなどはダメ。1億の値に耐えられないはずなので、もっと緻密にN, K, M だけで実装必要

回答

N, K, M = list(map(int, input().split()))
l = [list(map(int, input().split())) for l in range(N)]
li = sorted(l, reverse=True, key=lambda x: x[1])
resultk = []
resultv = []
for i in range(len(li)):
  if (li[i][0] not in resultk and len(resultv) <= K and len(resultv) < M):
    resultk.append(li[i][0])
    resultv.append(li[i][1])
    li[i][0]='x'
for i in range(K):
  if (li[i][0] != 'x' and len(resultv) <= K):
    resultv.append(li[i][1])
print(sum(resultv))

解説放送

[https://atcoder.jp/jump?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DGEfbafj4s2U%26t%3D798s:title]