# D - Integer Cards (opens new window)

# 概要

  • 以下の操作を行った時のカード値の合計の最大値を求めよ
    • カードをBj(Bj0)B_j(B_j \geq 0)枚選び, カード値をCjC_jに書き換える

# 思考

  • CCBBをpairにして逆ソート, AAをソートしておく(なんとなく)
  • CCAAの値を比較しながら更新
    • CCの値の方が大きいとき
      • AAの値を更新
    • else
      • 更新終了
      • ソートしているのでそれ以上最大値は更新されない

# 解法

  • CCBBをpairにして逆ソート(indexはCC)
  • AAをソート
  • CCAAの値を比較しながら更新
    • CCの値の方が大きいとき
      • AAの値を更新
      • 最後まで行ったらみているところにBBの値を加算する
        • 尺取り法のように一度みたところは見なくて良い
    • else
      • 更新終了
      • ソートしているのでそれ以上最大値は更新されない

# 気づいたこと

  • std::accumulateを使うときの第三引数は0LLにした方が良い
    • オーバーフローしていた原因がそこにあった
  • ループ内の記述を無理やり外に出さない方が良い
    • 部分的にWAになる恐れがある
    • どうしても必要なら仕方ない

# 提出

  • (提出 #7345018)[https://atcoder.jp/contests/abc127/submissions/7345018]
Last Updated: 9ヶ月前