Educational Codeforces Round 77

スポンサーリンク

A. Heating

なるべく均等に割り振ります.

B. Obtain Two Zeroes

総和が $3$ の倍数で,互いにもう一方の $2$ 倍を超えないというのが条件です.必要性は明らかです.十分性は $a+b$ に関する帰納法で示せます.

C. Infinite Fence

最大公約数で割って $r,b$ は互いに素としてよいです.$r<b$ として $rb$ の公倍数のところは $r$ の色にしたときにどうなるかを考えます.

D. A Game with Traps

二分探索です.判定問題では,解除しなければいけない罠があるところについて右左右と移動してコスト $3$ になります.

E. Tournament

弱い人は単に $a_i=0$ としておけばよいです.$1, 2, 4, \ldots, 2^{n-1}$ 人組を作って,それぞれの中で最大インデックスの人のコストがかかります.コストがかかる人を選ぶ問題です.

インデックスの大きい方から並べたとき,まず最初人のコストがかかります.そのあとインデックス $2^{n-1}$ までは,コストをかけてもかけなくてもよいです.このようにして,「この時点までで少なくともいくつ選ばなければいけない」というタイプの最適化になります.必要に迫られたら最小コストのものを選ぶ・そうでなければ判断を保留するというのを貪欲にやっていきます.

F. Colored Tree

$h=1,2,3,\ldots$ 順に処理することを考えます.求めるものを期待値に置き換えれば,頂点 $i$ に重み $p=1/(r-l+1)$ が発生したり消えたりというイベントをこなしながら,$2$ 点の距離と重み $2$ つの積の総和をとるということをすればよいです.

dist(a,b)=depth(a)+depth(b)-2depth(lca(a,b)) として最後の部分の扱いだけが問題です.さらにこの部分を辺ごとの寄与に分解して考えれば,辺ごとに,subtree 内にある 2 点組の重みの積の和を管理すればよいことになります.これは HLD と遅延セグメント木でできます.

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