A. Bigrams
- AB を $2$ 回作る
- AA を $2$ 回作る
などを考えます.
B. Predominant Frequency Division
適当な累積和テーブルを用意すると,
$0 \leq X_i, Y_i \leq Y_j$ となるように $0<i<j<N$ を選ぶ問題になります.
$i$ を全探索して $Y$ の条件は適当な suffix max の計算です.
C. Unstable Elements
「増やして減らす」はもとに戻ります.したがって,
「減少連打 → 増加連打」
のパターンしか調べなくてよいです.減少操作を愚直にやりながら,現在の marked な要素の個数をチェックするということを実装すればよいです.
- 現在生き残っているインデックスの集合
- 現在 mark されているインデックスの集合
などを正しく管理すればよいです.ある削除操作の直後には,その近傍の mark が正常になるように更新します.
減少操作の回数を変えても mark の個数が変わらなかった場合には,新しい答にならないので注意.
D. Two Digit Strings
私はすこし面倒実装をしてしまったのですが,よく考えれば,累積和 mod 10 が一致したところで切っていくだけなので,単に LCS ということになります.
ただし末尾の切れ目は使わなければいけないというところで必要条件をひとつチェックします.
E. Product of Closures
まず,候補をしぼります.
セグ木的のように $2$ 進区間 $[2^k\cdot i, 2^k\cdot (i+1))$ に分解します.
この中では $2^k\cdot i$ が最弱で,それだけを候補とすれば基本的によいです.
ただし「相異なる $2$ 個を選ぶ」ルールにそなえて,候補が最終的に $1$ 個しかない場合などの例外処理もした方が良いです.今回の問題では例えば $l=r$ も許容するように緩和しても答は変わらないので,候補を増やさないかわりに自身を $2$ 回使うパターンを考慮するなどでもよいです.
(私は各区間から $2$ 個ずつ候補をとってきてしまったのですが,定数倍的にも無駄でした.)
また答を求めるためには,それぞれまず $n$ 桁まで延長してしまった上で AND をとればよいです.
結局次の状況になります.
- 長さ $N$ の 01 列がいくつかある($60$ 個程度).
- $2$ つの AND として得られる 01 列を最小化せよ.
私は結局,全部の $2$ 個組を試しました.bitset _Find_first などを使って辞書比較をすれば十分高速です.
F. Summer Vacation
これ平衡二分木のマージを適切にやればよいというやつ
でできると思うんですが,実装さぼっていたため諦め方針(いや,これさぼっていたのは流石に反省,要復習).
そして,計算量不明解法を実装して AC です.
気持ち.
初期値が違っても何ステップも進めると合流してしまいがち.あんまり合流しないように $a_i$ を定めようとすると,今度は大量の値を同じ符号で動かし続けている.
なので適当なブロックに分割にして,「ブロック内で同じ符号に動き続けるもの」をまとめればいいんじゃないか.
ブロックに分割し,必要になるまで計算しない.必要になったときは「次のブロックまでの状況」を愚直シミュレーション.一度計算した場所およびはメモ化.その際,同じ符号で動き続ける範囲もまとめてメモ化しておく.
AC
???
hack 可能かもしれません.
