AtCoder Beginner Contest 153 C - Fennec vs Monster
久しぶりに晴れている気がします、ねむーです。
今回はAtCoder(https://atcoder.jp/contests/abc153/tasks/abc153_c)にて開催されました、AtCoder Beginner Contest 153 C問題「C - Fennec vs Monster」の問題と僕との戦闘記です。
0.はじめに
1.問題文
フェネックは N 体のモンスターと戦っています。
i 番目のモンスターの体力は H i です。
フェネックは次の 2 種類の行動を行うことができます。
- 攻撃:モンスターを 1 体選んで攻撃することで、そのモンスターの体力を 1 減らす
- 必殺技:モンスターを 1 体選んで必殺技を使うことで、そのモンスターの体力を 0 にする
攻撃と必殺技以外の方法でモンスターの体力を減らすことはできません。
全てのモンスターの体力を 0 以下にすればフェネックの勝ちです。
フェネックが K 回まで必殺技を使えるとき、モンスターに勝つまでに行う攻撃の回数 (必殺技は数えません) の最小値を求めてください。
2.制約
- 1 ≤ N ≤ 2 × 105
- 0 ≤ K ≤ 2 × 105
- 1 ≤ H i ≤ 109
- 入力中のすべての値は整数である
3.入出力例
- 入力
3 0 1000000000 1000000000 1000000000
- 出力
3000000000
4.初見の感想
- HPの大きい敵に必殺技を使いたい
- HPの昇順にソートして、HPの和をK番目から考える
- オーバーフローに注意してlong型を使用
5.コードと簡単な解説
using System; using System.Collections.Generic; using System.Linq; class Program { public static void Main() { string[] input = Console.ReadLine().Split(); long N = long.Parse(input[0]); long K = long.Parse(input[1]); long[] H = new long[N]; input = Console.ReadLine().Split(); for (long i = 0; i < N; i++) { H[i] = long.Parse(input[i]); } Array.Sort(H); Array.Reverse(H); long ans = 0; for(long i = K; i < N; i++) { ans += H[i]; } Console.WriteLine(ans); } }
6.最後に
実はブログ投稿ツイートのいいねに喜んでいます!