AtCoder Beginner Contest 447D問題
解法
3つの物を扱うので,真ん中に注目する.そうすれば,残りの2つが対称的になりやすいため. 'B' を固定した場合,使うべき 'A' と 'C' は先頭から貪欲に決めればよい.
使っている記号,マクロ等 "https://ecsmtlir.hatenablog.com/entry/2022/12/23/131925"
AtCoder Beginner Contest 447C問題
解法
まずは判定問題を解く.簡単にするという意味もあるが,判定問題が解ければ,判定した後は 条件を満たすと仮定できるという利点もある.
判定問題は,SとTの'A' を全て削除して,文字列として一致していることが必要十分.
次に,判定問題で true の場合に最小値を求める.先頭から貪欲に見る. Sの先頭とTの先頭が一致していれば消せば良いし,そうでなければ 'A'を追加すれば良い. 先頭の扱いは deque を用いたが,reverse して stack or vector でも良い.
使っている記号,マクロ等 "https://ecsmtlir.hatenablog.com/entry/2022/12/23/131925"
AtCoder Beginner Contest 427E問題
*1:{}_{13}C_{2})^2\) 以下, 遷移は \(12^2\) 以下で計算できる. また,遷移で 4方向を調べるため,定数倍が 4程度かかるが間に合う.
使っている記号,マクロ等 "https://ecsmtlir.hatenablog.com/entry/2022/12/23/131925"
AtCoder Beginner Contest 428E問題
解法
木の直径を求めるアルゴリズム(ダブルスイープ)で OK.
使っている記号,マクロ等 "https://ecsmtlir.hatenablog.com/entry/2022/12/23/131925"
AtCoder Beginner Contest 429E問題
解法
多始点BFS. イメージとしては,始点とpath に色を付けて区別しながら BFS.
使っている記号,マクロ等 "https://ecsmtlir.hatenablog.com/entry/2022/12/23/131925"
AtCoder Beginner Contest 434E問題
解法
各ウサギについて,左右2通りが選べる. ウサギの座標を \(x\)として,左右の \(x-r, x+r\) の2つに辺を張ったグラフを考える. 左右を選ぶことは,辺の向きを選ぶことに対応する,もしくは辺の両端の一方に色をつけるという事に対応する. 頂点に色を付けたと考えて,以下話を進める. 色を付けた頂点の種類数の最大値を求める問題に帰着出来た.
連結成分毎に独立して解ける.連結成分の頂点数を \(order\), 辺の数を \(size\) とおく.
- 連結成分が木の場合: \(order - 1\) 個の頂点に色を付けるのが最大となる.
- 木でない場合: \(order\) 個の頂点に色を付けるのが最大となる.
使っている記号,マクロ等 "https://ecsmtlir.hatenablog.com/entry/2022/12/23/131925"
AtCoder Beginner Contest 444D問題
解法
今の桁数を保持しながら,筆算の要領で計算すればよい. 桁数を保持しておくことで,今の桁にいくつ \(1\) を足せばよいか確定する.
使っている記号,マクロ等 "https://ecsmtlir.hatenablog.com/entry/2022/12/23/131925"