概要
- 以下の操作を行った時のカード値の合計の最大値を求めよ
- カードをBj(Bj≥0)枚選び, カード値をCjに書き換える
思考
- CとBをpairにして逆ソート, Aをソートしておく(なんとなく)
- CとAの値を比較しながら更新
- Cの値の方が大きいとき
- else
- 更新終了
- ソートしているのでそれ以上最大値は更新されない
解法
- CとBをpairにして逆ソート(indexはC)
- Aをソート
- CとAの値を比較しながら更新
- Cの値の方が大きいとき
- Aの値を更新
- 最後まで行ったらみているところにBの値を加算する
- else
- 更新終了
- ソートしているのでそれ以上最大値は更新されない
気づいたこと
std::accumulate
を使うときの第三引数は0LLにした方が良い
- ループ内の記述を無理やり外に出さない方が良い
- 部分的にWAになる恐れがある
- どうしても必要なら仕方ない
提出
- (提出 #7345018)[https://atcoder.jp/contests/abc127/submissions/7345018]