A. Souvlaki VS. Kalamaki
$a$ をソートしておく戦略を考えると,後手番で選ぶ $i$ について $a[i]=a[i+1]$ となっていることが十分です.
必要性も分かります.後手番時点で $[0,i)$ が下位 $i$ 個になっていることが必要ですし,その状況下で $a[i],a[i+1]$ は残り要素の下位 $2$ 個かつ等しいものになっている必要があります.
B. Siga ta Kymata
次は 1 にすることはできません:$1,n$ 番目および,$p_i=1,n$ であるような $i$ 番目.
他は $5$ 回でできます.$p_s=1,p_t=n$ として,$[1,n], [1,s], [1,t], [s,n], [t,n]$ を操作すればよいです.
要素を平面上の点 $(i,p_i)$ と見て図形的に理解することも可能です.$[1,s], [1,t], [s,n], [t,n]$ を操作して残ってしまう領域があるならば,それは真ん中の長方形で,$[1,n]$ の他,$s,t$ の大小に応じて $[s,t]$ または $[t,s]$ を $5$ 回目の操作とすることもできます.
C. Monopati
尺取り法を考えまず.$[L,R]$ を有効化したときの判定を高速にできればよいです.
down-right path の存在判定は次のようにできます:
- $(1,1)$ から可能な限り右に進むときの移動範囲を調べる
- $(2,n)$ から可能な限り左に進むときの移動範囲を調べる
- これらの区間が交わるかを判定
それぞれの行について,有効化されていないマスの集合を保持すればよいです.
D2. Diadrash (Hard Version)
まず,区間について包含関係 $I\subset J$ があるとき $I$ を取り除くという操作をします.これをやっても答は変わりません.
これを可能な限りやったあと適切にソートすると,区間を $[L_i, R_i)$ とするとき,適切にソートすれば単調性 $L_i<L_{i+1}$ かつ $R_i<R_{i+1}$ がある状態になります.
調べたい区間全体がソート列のようになって考えやすくなったので,この状態から二分探索のようなことを考えます.次のようにすればよいです.
- $n$ 個の区間が調査対象であるとき,$k=\lfloor n/2\rfloor$ として,$k$ 番目の区間 $[L_k,R_k)$ をクエリする.$x=ANS_k$ が得られたとする.
- 以降 $x$ より大きな解を探すことになる.まず $[0,R_k)$ をクエリする.これが $x$ だとすると,$[0,R_k)$ には $x$ が存在しないので,調べるべき区間は $k+1,k+2,\ldots,n-1$ 番目の区間に限定できる.
- これが $x$ より大きいとすると,今度は $[L_k,N)$ の中には $x$ が存在しないので,調べるべき区間は $0,1,\ldots,k-1$ 番目の区間に限定できる.
クエリ回数は区間の個数を $M$ として $2\log_2 M$ 程度です.包含を除いた状態では同じ左端 $L$ を持つ区間は高々 $1$ 個しかないので,これは $2\log_2 N$ 程度になっていて大丈夫です.
E. Plegma
連結性という設定はほぼ無視できて,結局 $0,1$ の $2$ 通りを上手く送り分けられればよいです.最終的には次のようにしました.
- $row_i, col_j$ に書かれた $1$ の個数 $x_i,y_j$ を比べる.
- $x_i<y_j$ であるとき,これらを送信することが $1$ を表すものとする.
- $x_i>y_j$ であるとき,これらを送信することが $0$ を表すものとする.
$\sum x_i = \sum y_j$ なので,この戦略で失敗するのは $x_1=\cdots=x_N=y_1=\cdots=y_N$ となるときだけです.さらに次のようにします.
- $row_i$ の先頭が $0$ で $col_j$ の先頭が $1$ のとき,これを送信することが $1$ を表すものとする.
- $row_i$ の先頭が $1$ で $col_j$ の先頭が $0$ のとき,これを送信することが $0$ を表すものとする.
$0<x_1=\cdots=x_N=y_1=\cdots=y_N<N$ のとき,ここまでの戦略で必ず目的のものを送信できます.
あとは,グリッド全体が $0$ やグリッド全体が $1$ のときが残ります(この場合には送信者のとれる選択肢がひとつしかないので,$0,1$ を送り分けることはできません).ここで連結性などの問題設定を思い出せば,このようなパターンを受信した場合には $1$ と答えればよいです.
