AtCoder Beginner Contest (ABC) E問題 精進記録

このスクラップについて
自分が未ACのABCのE問題を,新しい順番に解いていった記録です.
以下のルールでやっていきたいと思っています.
- 考えたこと・思考過程についてちゃんと書く.
- ただし,解けるまで粘るのではなく,しばらく考えてわからなかったら解説ACをしてもよい.
- コードは他の方が参考にするかもしれないという意識を持って,なるべくリーダブルなコードを書く.
- 各問題を解いたあとに,なにか得たものについて書く.
- ちゃんと書くのがしんどいときは,略解となにか得たものについてのみ書く.
自分の解答・投稿に対し,ご質問・ご指摘などあれば,気軽にコメントをどうぞ!
忙しくなければ,回答します.

ABC410 E - Battle in a Row

考えたこと
貪欲は無理そうなので,dpっぽい.
一旦,脳筋のdpを書いてみる.
蟻本のP62にもあるように,bool型を持つdpは無駄であることが多い.
試しに,
- 初期状態
-
.それ以外は,\text{dp}[0][H] = M .-INF
-
- 出力
\max_{i} (\exists h, \text{dp}[i][h] \ge 0)
- 遷移
-
の昇順に見る.i, h -
なら,h \ge A_i .\text{chmax}(\text{dp}[i+1][h-A_i], \text{dp}[i][h]) -
なら,\text{dp}[i][h] \ge B_i .\text{chmax}(\text{dp}[i+1][h], \text{dp}[i][h]-B_i)
-
提出 (47ms)

フォローアップ
解説を読むと,bitset高速化を用いて,
ただ,MLE
することを忘れて1ペナしました.in-placeにして実装し直し,AC
.
また,
として解くこともできるみたいです(たしかに!).

得たもの
- bitset高速化はin-place化して,
MLE
を回避. - dp の状態数削減について,他の添字についても考えてみる.

ABC408 E - Minimum OR Path

考えたこと
「ビット演算は各ビットごと独立」の典型に則って考えてみる.
問題の総
これを最小化したいので,
そこで,上位ビットから順番に見ていって初めて
がわかる.また,それより下位のビットを決めていくときは,これに加えて,それより上位のビット
まとめると,
この条件のもとで,bfsを行い,0 から N-1 へ到達可能かを見ればよい.
提出 (467 ms)

得たこと
bit反転を行うときに,or や and で頑張っていたが,xor で簡単にできる.

ABC409 E - Pair Annihilation

考えたこと
各頂点にいる陽電子は別々に考える必要はないので,
まず,葉の頂点にいる陽電子が消滅するにはどうしたらよいかを考えると,どれと対消滅するかはわからないが,必ず葉に接続している辺を,電子・陽電子のどちらかは通ってくる.
ここで,辺に視点を移してみる.
ある辺
制約より,
これを全ての辺について足し合わせればよさそう.
与えられた木を,
とすれば,求める答えは,
で求められる.
提出 (42 ms)
得たこと
木DPばかり考えていた.詰まったときは視点の変更.