A. Was there an Array?
「一致している必要がある場所」を最低限一致させて $A$ を作って判定します.
B. Set of Strangers
存在しない色を無視すれば,色ごとのコストは目標色が自色ならば $0$,そうでなければ $1$ または $2$ です.これらのコスト列について,ひとつ以外をとったときの総和を最小化すればよく,max 以外をとればよいです.
C. Beautiful Sequence
結局 [1, 2, 2, 2, 2, 2, 3] のような列を数えることになります.$3$ 状態の DP で数えられます.
D. Palindrome Shuffle
「先頭と末尾が同じ文字ならば両端を削除」を繰り返すと,先頭と末尾が異なる場合に帰着できます.この場合操作区間は prefix または suffix としてよいです.reverse して 2 回解くことにします. 条件には単調性があるので二分探索します.
E. A, B, AB and BA
同じ文字が連続する部分で区切って成分ごとに独立に考えます.「ABAB | BA | ABA」のような感じです.あとから AB や BA を A, B にばらす操作を考えることにして,まずは AB, BA の個数分布として達成可能なものはどういうものかを考えます.
長さ奇数の固まり,例えば「ABABABA」は 「A がひとつと AB, BA が合計 3 個」のような条件になります.「AB or BA」という別のアイテム X の個数を持っておきます.
長さ偶数の固まりは,「ABABABAB」なら「AB を 4 つ,または A, B, X, X, X」などと考えておきます.
ABAB, BABA 両方のパターンを A, B, X に分解する解はそれをしない解に変形できるので,2 回解くことにすれば,BABABA はとりあえず BA に分解してしまってよいです.
あとは貪欲な順番で作ります.AB についてはたくさんできそうになったら,長さの大きい方から A, B, X に分解します.議論はいたるところ難しくないですが慎重な議論をたくさん積み重ねることになりました.
F. Graph Inclusion
読解が難しいですが,結論としては次のようになります:
- ラベル A の辺だけを使ったグラフの連結成分の個数,ラベル A, B 両方の辺を使ったグラフの連結成分の個数,の差を求めよ.
これは有名問題(offline dynamic connectivity)で,分割統治により追加削除を追加とロールバックに変換して,ロールバック可能な UnionFind を使って解くことができます.$O(N\log N\log Q)$ 時間.