A. Hungry Student Problem
dp.
B. The Modcrab
回復連打のあと攻撃連打としてよいです.二分探索しました.
C. Boxes Packing
同じ大きさの個数の max です.
D. Almost Difference
$y-x\leq -2$ および $y-x\geq 2$ それぞれで計算.区間の個数と sum がとれればよいです.
E. Swapping Characters
s[0] のスワップ場所をすべて試します.他の文字列は Hamming distance が適切ならばよいという判定条件になります.Hamming distance を毎回全部計算しなくてよいように,スワップごとに差分更新します.
F. Clear The Matrix
左の列から置くか置かないかなどを決めていきます.最後の $3$ 列分の状態をもって dp することができます.
G. Yet Another Maxflow Problem
最小カットを考えます.A, B それぞれの側の頂点を色 0, 色 1 で塗って(A の最初は 0 で B の最後は 1),0 から 1 に向かう辺の重みの和がカットの値になります.
A[i]=1 ならそこから先はすべて 1 としてよいです(変えても損しない).B[j]=0 ならばその手前はすべて 0 としてよいです.よって A, B とも,000111 のような割り当てをするとしてよいです.
A の各切り方に対するカットの値を F[i] とすれば,A 側の辺重みの更新は F の点加算に対応します.よってクエリへ答えるには F を求めたあとセグメント木を使えばよいです.
F の初期状態を求めたいです.これは B 側のカット位置を決めた場合のカットの値の列を考え,i の変更に対する差分更新をすればよいです.これは遅延セグメント木で行えます.A 側の 0 と定める点を増やすたびに,入力辺の寄与を入れていく感じになります.