A. Increasing Sequence
手前から貪欲に決めます.
B. Sets and Union
$x\notin S$ となる $x$ が存在しなければいけないです.そのような $x$ を固定すると最大化は簡単です.
C. Card Game
奇数インデックスでとる最初のカードを固定します.後ろは $0$ 倍,$1$ 倍の好きな方でとれます(末尾のカードについて,初手でとるか何かが起こった後にとるかを決められる,それ以外は末尾を無視して同じことを考える).$2$ 番目のカード以外は,奇数インデックスでとる最初のカードにできます.
D. Tree XOR
桁ごとに解きます.なので値は 0, 1 だとして考えればよいです.
根を固定した場合には,根側から貪欲で計算できます.これを bottom up な木 DP の形で書けば,各 subtree に対して,「根から親までの部分に操作した回数の偶奇を固定したときの答」を持つ形で木 DP にできます.これを全方位にすればよいです.
E2. Two Permutations (Hard Version)
列が $2$ つありますが,ほぼひとつの列に対する問題です.操作回数を $2$ 回増やすことはできるので,操作回数の偶奇を固定した場合の回数最小化問題が解ければよいです.
列 A を $0, \ldots, n-1$ の順列とします.
列 B を $0,\ldots, n$ の順列とします.
A から B を得る操作を,末尾に $n$ を追加することとして定めます.B から A を得る操作を,$n$ が末尾に来るように cyclic shift したあとで末尾を pop することとして定めます.
すると,A に対する問題文の操作は,「A を B に変換し,B において $n$ と何かを swap し,B を A に変換する」となります.操作を繰り返すことも「A を B に変換し,B において $n$ と何かを swap する操作を繰り返し,B を A に変換する」となります.
結局,列 B 側で次のような問題を解けばよいことになります:
- 「$n$ と何かを swap」を繰り返して,$0,1,\ldots,n$ の cyclic shift のうちのひとつを作れ.
目的の cyclic shift を固定する(初期状態を cyclic shift した方が実装が簡単かも)と,長さ $n+1$ の順列について次が解ければよいことになります:
- 「$n$ と何かを swap」を繰り返して昇順にせよ.
単に「何かを swap」の場合が有名だと思います,サイクル分解をとってサイクルを増やすように操作していくのが最適です.片方が $n$ のときもだいたい同じです.サイクル分解をとると,出来る操作は「$n$ を含むサイクルと他のサイクルの併合」「$n$ を含むサイクルの分解」を繰り返して長さ $1$ のサイクルに分解すればよいです.
操作回数の偶奇が決まってしまうこと,適当な貪欲法で最小回数が実現できることが分かります.