A. The Bento Box Adventure
$15-a-b-c-d$
B. Bowling Frame
自明な必要条件 $n(n+1)/2\leq b+w$ は十分条件にもなります.$b+w=n(n+1)/2$ としてよく,$0\leq b\leq n(n+1)/2$ が $\{1,2,\ldots,n\}$ の部分和になることを示せばよく,これは例えば帰納法で示せます.
C. Cube
$z=0,1,\ldots$ 順に決めていく dp をします.状態として,$x$ の集合と $y$ の集合を持ちます.
ひとつの状態からは $O(n^2)$ 遷移ありますが,状態数の自明な上界は $2^{24}$ ですが,$x,y$ の集合の大きさが等しいところしか出てこないので $\binom{24}{12}$ 状態になります.
D. Drunken Maze
方向・回数と追加の情報として持って $16HW$ 状態で最短路問題を解きます.
E. Beautiful Array
長さ $3$ の列で目的を達成可能です.
F. Segmentation Folds
素数がある程度密に存在すること($1/\log x$ 程度)から,$1$ 回操作するとだいたい長さは半分になります.このことから操作列の長さが $\log_2 (R-L)$ 程度,よって操作列の個数が $R-L$ 程度になると見積もれます.この見積もりは正確ではないですが,操作列を全探索する方針で大丈夫です.
G. Grid Game
少し実装量が多いですが複雑なアイデアは要らないです.
$y$ については適切に座圧します.$x$ 方向については各 $y$ について,適当な区間に分割します.分割の切れ目は,$y-1, y, y+1$ の座標において $s, f$ となっている部分がとれるようにしておきます.
これで全体が $O(q)$ 個の長方形に分割され,隣接関係も $O(q)$ 個の辺で表すことができます.
あとはどのような点を削除すると連結成分が増えるかですが,同じ区間内の点でも端の点と中央の点で結果が変わりうることに注意します($s, f\pm 1$ でも切っておくとより簡潔だったか).
H. Sheet Music
まずは等号なしの状態で各 $m$ について長さ $m$ の列を数えて,そのあとで等号を挿入する二幸係数をかけます.等号を除くと,上限のある正整数の列で総和が $m$ のものを数えるという形になって,これは fps inv の形です.$1+x+\cdots+x^k$ の形の和を疎な商として表せば,疎な fps の商の形になって $O(n)$ 時間で計算できます.
I. Auto Complete
trie を作って各文字列の優先度も割り振っておきます.すると木の頂点を activate, diactivate などしながら,部分木の中で最も優先度の高いものを出力するという木クエリの問題になります.
木の同じ頂点に複数の文字列が来る可能性があるので,末尾に適当な文字を足すなどしておいて文字列が異なるようにしておくと少し実装しやすいと思います.
J. Bottle Arrangement
$b$ はソートして $b_1<b_2<\cdots$ としておきます.$b$ が distinct であるという仮定により,いくつかの $b_j$ に $-1$ 操作をしてもソート順は不変であることに注意します.
最大値のものを置く場所を $k$ として,まずはこれを固定して考えます.$i<k$ ならば $a_i$ を $\min\{a_i,\ldots,a_k\}$ に置き換え $k<i$ ならば $a_i$ を $\min\{a_k,\ldots,a_i\}$ に置き換えることで,$a$ も bitonic にします.
まずは $-1$ 操作を禁止して考えると,$a_i>b_j$ となるような完全マッチングの存在が必要です.そのようなマッチングがあれば,適当なスワップにより $a$ のソート順と $b$ のソート順が一致するようなマッチングに変形できて,このとき $b$ も bitonic になることが示せます($a$ に対して前処理したことを使っています).よって,$a$ のソート順と $b$ のソート順を一致させて並べることだけを考えればよいです.
よってやるべきことは
- すべての $j$ を $b_j-1$ にした場合にうまくいくか.つまり:
- $b_j$ 以上であるような $a_i$ が $j$ 個以上あるか
- 上の条件が成り立つときに,$b_j-1$ にする必要がある $j$ はいくつあるか.つまり:
- $b_j$ 以上であるような $a_i$ が $j$ 個より大きいような $j$ はいくつあるか
$k$ を動かしながらこのような問題を解くことを考えます.$k$ を動かしたとき,$a$ の変化は 「$l\leq i\leq r$ に対して $a_i=x$ になっているのでこれを $a_i=y$ に変更する」という形の操作 $O(N)$ 回で書けます.$x_j$ を $b_j$ 以上であるような $a_i$ の個数から $j$ を引いたものとすれば,列 $x$ には区間加算操作になります.
以上の方針を整理すると,区間加算および,最小値・その個数の取得というクエリを $O(N)$ 回行えばよいことになり遅延セグメント木を使えば解けます.
K. Trophic Balance Species
単にグラフの reachable pair を数える問題で,$O(N(N+M)/w)$ 時間で解けます.これでも何とか AC 可能です.
antichain の大きさが $k$ 以下であることから $k$ 個以下のパスで被覆可能(dilworth の定理)で,ある点から reachable な点は各パスの suffix であることを使うというのが想定されていると思います.
L. Building Castle
点対称の中心点を $p$ として,対称移動との共通部分 $P\cap (2p-P)$ について考えます.$p\in P$ ならば $p$ が共通部分が空ではなくて,$p\notin P$ ならば適当な直線で分離することで共通部分は空になることが分かります.$p\in A$ に対して面積 $|P\cap (2p-P)|$ の平方根が上凸になり,したがって三分探索の類で答が求まるというのが想定のようです.
一応本問題の証明は理解できたつもりなので書きます.まず Brunn-Minkowski の定理を,本問に必要な簡単な形で証明します.
この記事では簡単のため,コンパクト凸な平面図形を対象とします.
[定理] $\R^2$ のコンパクト凸集合 $A, B$ に対して $\mu(A+B)^{1/2}\geq \mu(A)^{1/2}+\mu(B)^{1/2}$ が成り立つ.
平行移動により $A,B$ それぞれの $x$ 座標最小値を $0$ とし,$x$ 軸へに射影が $[0,a]$, $[0,b]$ であるとします.$A$ と $x=at$ の共通部分の長さを $f(t)$,$B$ と $x=bt$ の共通部分の長さを $g(t)$ とします.$A+B$ と $x=(a+b)t$ の共通部分の長さは少なくとも $f(t)+g(t)$ 以上です.よって次を示せばよいです:$$\left((a+b)\int_0^1 f(at)+g(bt)\right)^{1/2}\geq \left(a\int_0^1f(at)\right)^{1/2}+\left(b\int_0^1g(bt)\right)^{1/2}$$
すると $a,b,x,y\geq 0$ に対して $(a+b)^{1/2}(x+y)^{1/2}\geq (ax)^{1/2}+(by)^{1/2}$ を示せばよく,これは簡単です.
[系] $\R^2$ のコンパクト凸集合 $A, B$ と実数 $\lambda\in [0,1]$ に対して $\mu\left(\lambda A+(1-\lambda)B\right)^{1/2}\geq \lambda \mu(A)^{1/2}+(1-\lambda)\mu(B)^{1/2}$ が成り立つ.
定理において $A, B$ を $\lambda A$, $(1-\lambda)B$ などとして,$\mu(\lambda A)=\lambda^2\mu(A)$ などを使えばよいです.
これを使って本問の設定で次を示します.
$P$ を凸多角形とするとき,$P\longrightarrow \R; p\longmapsto \mu\left(P\cap (2p-P)\right)^{1/2}$ は上凸関数である.
$D(p):=P\cap (2p-P)$ とします.$p,q\in P$ および $\lambda\in [0,1]$ に対して $$\mu\bigl(D(\lambda p + (1-\lambda)q)\bigr)^{1/2}\geq \lambda\mu\bigl(D(p)\bigr)^{1/2}+(1-\lambda)\bigl(D(q)\bigr)^{1/2}$$ を示せばよいです.
上の系より,$D(\lambda p + (1-\lambda)q)\supset \lambda D(p)+(1-\lambda)D(q)$ を示せばよいです.これは簡単です.$r=\lambda p+(1-\lambda)q$ とします.$a\in D(p), b\in D(q), c=\lambda a + (1-\lambda)b$ として $c \in D(r)$ を示せばよいです.$a\in D(p), b\in D(q)$ より $a, 2p-a, b, 2q-b\in P$ が成り立ちます.よって $P$ の凸性より $\lambda a + (1-\lambda)b\in P$, $\lambda (2p-a)+(1-\lambda)(2q-b)\in P$ が成り立ちます.よって $c\in P, 2r-c\in P$ が成り立つので $c\in D(r)$ が成り立ちます.以上で示されました.
M. Selection Sort
prefix, suffix, preffix → suffix, suffix → prefix というパターンを調べればよいです.suffix → prefix について考えます.各 $x$ について,suffix sort によって suffix を $x,x+1,\ldots,N$ にするためのコストを考えればよいです.
N. Railway Construction
$a_1\leq a_2\leq \cdots$ としてよいです.
まず頂点を削除なしの場合を考えます.
最初に次を行います:各 $v$ に対して最小番号の近傍 $w$ をとって辺で結ぶ.
この時点で,
- 連結成分数は $O(\sqrt{m})$
- 次数 $2$ 以上の頂点の個数は $O(\sqrt{m})$
が成り立ちます.なぜならば,$O(\sqrt{m})$ 個の頂点を除いて近傍としては $\sqrt{m}$ 以下の番号の頂点が選ばれるからです.
この時点での連結成分をマージしたあと,$O(m)$ 時間かけて prim 法で最小全域木を求めることができます.特定の $2$ つの連結成分の間で最もコストが小さい辺を探すことが必要になりますが,余分に調べる辺の個数が禁止辺の個数に比例するようにできれば $O(m)$ 時間になってこれはそれほど難しくないです.指定された $2$ 点間の辺が禁止されているかを調べる必要が出てきますが,これは私は $\binom{N}{2}$ 個の bool をメモリに持ちました($600$ MB 程度なので大丈夫).
上の議論から,結果的に出てくる全域木のうち次数 $2$ 以上の点は $O(\sqrt{m})$ 個しかないことも出てきます.最初の操作時点でそうで,そこから $O(\sqrt{m})$ 本の辺を追加するだけだからです.
$1$ 頂点を削除したときの全域木について考えます.最初に削除なしの場合の全域木を求めておきます.削除なしのときに不連結であることもありえますが,このときは $1$ 点削除して連結になる点の個数は $O(1)$ 個になるのでそれらの削除点の場合だけを計算すればよいです.
削除なしの場合の全域木で次数 $1$ の頂点については,その点をグラフから削除したときには全域木からもその点を削除するだけでよいです.
よって再計算が必要な削除点の個数は次数 $2$ 以上の点 $O(\sqrt{m})$ 個しかなくて,これらに対して個別に計算することで全体で $O(m^{1.5})$ 時間で解くことができます.計算量の定数倍は重めだと思います.