Educational Codeforces Round 18

スポンサーリンク

A. New Bus Route

ソートして差分の最大値を数える.

B. Counting-out Rhyme

書いてある通りにシミュレーション.

C. Divide by Three

1, 2 の両方を削除することはしないとしてよいです.1 や 2 を $3$ 個以上削除することもしないとしてよいです.削除するもの・個数を決めたら,なるべく後ろの位置にあるものを使う方が,prefix にのこる 0 の個数が増えにくいです.これで候補が $O(length(N))$ 通りになります.

D. Paths in a Complete Binary Tree

1 つ移動する処理ができればよいです.高さを見れば移動するときの差分がわかります.

E. Colored Balls

ひとつあたりの個数は $floor(A[0]/k)$ と書けるものの近くだけです.

F. Mages and Monsters

ちょうど 1 秒でありうる (damage, mana) は,入力の $(x,y)$ の凸結合全体です.凸包を管理しながら,mana が指定の大きさを超えない範囲の最大 damage がいくつかを計算すればよいです.

incremental に凸包を管理して,ある $x$ 座標の前後の $2$ 点が何かを得られればよいということになります.

凸包は incremental ならば比較的容易に $O(N\log N)$ 計算量で扱えます.1 点を挿入すると,前後のいくつかの頂点が削除される感じになり,ある点が削除対象かどうかは前後の点から決まります.

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