問題
https://atcoder.jp/contests/abc153/tasks/abc153_c
方針
体力の多いモンスターに対して、優先的に必殺技を使う
ポイント
- 組み込み関数
sort
を用いるとよい- 昇順にソートが行われる
- ソート済みのリストに対してスライスをし、合計を計算すれば良い
- 小さい順(先頭から)にスライスを行う
- N(モンスターの数)からK(必殺技を使える回数)を引いた数がスライスの位置(攻撃で倒す必要があるモンスターの数)となる
- モンスターの数以上に必殺技を使える場合(N<=K)に注意する
- 組み込み関数
max
を用いることで、スライスの位置が0以上になることを保証できる
- 組み込み関数
- 小さい順(先頭から)にスライスを行う
コード
1 | N, K = map(int, input().split()) |
メモ
組み込み関数sorted
を用いた場合、ソートされたリストが返却される。
一方、メソッドsort
をコールした場合、元のリストがソートされる。
このような上書きされる処理をインプレース
な処理と呼ぶ。返却値はない(None
)であることに注意する。
1 | >>> ls = [1, 4, 5, 3, 2] |
発展
PythonのソートアルゴリズムにはTimsort
が用いられている。平均計算量、最悪計算量ともにO(nlogn)である。