Educational Codeforces Round 34

スポンサーリンク

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 と定める点を増やすたびに,入力辺の寄与を入れていく感じになります.

CodeForces
スポンサーリンク
シェアする
maspyをフォローする
maspyのHP
タイトルとURLをコピーしました