Good Bye 2016

A. New Year and Hurry

$5(1+2+\cdots)\leq 240-b$

B. New Year and North Pole

そのままシミュレーションです.緯度だけ保持していればよいです.

C. New Year and Rating

初期値を $x$ として,各時点での情報から $x$ の上下限を計算します.

D. New Year and Fireworks

再帰の後ろのステップから順に,最初に進む方向を決めたときに通る座標全体を求めます.

E. New Year and Old Subsequence

まず $Q=1$ として考えます.先頭から $1$ 文字ずつ決めていく dp により解けます.2, 20, 201, 2017 のどこまでが subseq になったかどうかという $5$ 状態で dp ができます.

dp は $5\times 5$ 行列によってあらわされるのでこれをセグメント木にのせます.

F. New Year and Finding Roots

簡単のため $h=7$ とします.根は次数 $2$ の頂点なので一度でも根をクエリしたら気づけます.以下これが起こらないとします.

最初に葉がひとつ分かっている状態からはじめて $16$ クエリで目標を達成する方法を説明します.深さ $d$ の頂点に居るときにある方向に $d$ 回進み葉に到達するかによって,その方向が親であるか子であるかを判定できます.深さ $3$ 以上のときにこれを毎回行うと,$1+2+3+4=10$ 頂点の質問により深さ $2$ の頂点に到達します.さらにこのとき子のひとつが分かっています.ここから距離 $2$ 以下の頂点は全部で $7$ 個あり,これらのうち $6$ 点を調べれば答が確定します.

これは最初に葉に居る状態からはじめた場合ですが,そうでない場合には最初に適当な頂点から適当な方向に進むことを繰り返して(答を見つけるか)葉まで到達します.そのあとは,過去の質問をメモ化しておき,過去に調べた方向を優先して探索するようにすればやはり $16$ クエリでおさまることが確認できます.

G. New Year and Binary Tree Paths

根から左部分木へのパスの長さ,右部分木へのパスの長さを決めるごとに計算します.

これを決めたときに,根の場所は確定します.なぜならば,$X<Y$ であるとき $X$ を根として総和を最大化したときよりも $Y$ を根として総和を最小化したときの方が大きいからです(深さごとの対応する頂点同志を比べる).

根と左右部分木方向の深さを決めたとします.このとき各深さで左右どちらに進むかを考えると,「$a_i$ の総和で $S$ を作る方法を数えよ,ただし $ai=2^k-1$ の形」というタイプの問題に帰着されます.選ぶものの個数を固定すると桁 dp で解ける形になります.

H. New Year and Snowy Grid

まず $Q=1$ として考えます.判定すべき条件は適当なネットワークで流量 $2$ のフローが存在するかどうかですが,カットで言い換えると「$1$ 点を禁止すると $(s,t)$ パスが存在しないようにできるか」となります.さらにグラフの平面性から,右上領域から左下領域への壁だけを通る $8$ 近傍に関するパスが存在するか($8$ 近傍)を判定すればよいです.

前処理として,壁を連結成分分解しておきます.また,$1$ 点を壁に変えた場合にマージ可能な連結成分組も列挙しておきます.

クエリに答えます.最初から条件を満たしている場合は簡単なのでそうでないとします.既存の連結成分と追加壁によってさらに連結成分分解し,目的となる $2$ 成分があとひとつの壁でつなげるかをチェックです.

ここで考慮すべき「既存の連結成分」は,クエリで追加した壁と隣接するもの(および右上・左下領域を表す $2$ つの成分)だけに限定してもよいです.あとは,壁をひとつ追加して目的の $2$ 領域を連結にできるかどうかですが,この追加する壁としては,

  • いま注目している「既存の連結成分」同志をつなぐもの
  • クエリで追加した壁の近傍

だけを考えればよいです.「既存の連結成分」は $O(k^2)$ 個.前処理で列挙したものの中にこれらを接続するものがあるかなどを調べるだけなので,$O(k^2\log HW)$ 時間程度でクエリに答えられます.

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