A. A Number Between Two Others
$x$ の倍数にしか興味がないので全体を $x$ で割って考えると,$y$ の約数ではない何かを探すという問題になります.
$1,2,\ldots,k$ まで探索して見つからないのは $y$ がそれらの最小公倍数の倍数のときですが,最小公倍数が $\exp(k(1+o(1)))$ 程度になること(https://info.atcoder.jp/entry/algorithm_lectures/prime_related_complexity)を考慮すれば,愚直に試す解法が十分高速です.
B. Alternating String
この問題文の書き方で “you are allowed to do it, but you don’t have to do it” がカッコ書きで補足されているのが気づきにくすぎる.
作れる文字列とそのときの操作パターンを考えると,操作位置は両端や $S[i] != S[i+1]$ となる場所の関係者だけを候補としておけばよいことが分かります.そのような個数が多すぎると無理,そうでない場合そういう場所を候補として全探索しました.
C. Red-Black Pairs
「縦置き」または「横置き 2 つ」を並べることになります.あとは基礎的な dp です.
D. Exceptional Segments
$l,r$ の偶奇を考えます.$2^1$ の位以上の部分がどうなるかを考えると,だいたいのものが $2$ 個ずつ出てきて打ち消しあいます.その上で全体で $0$ になって欲しいと考えると,次のようなパターンだけだと分かります.
- $l$ が偶数かつ $r$ が奇数で $r-l+1$ が $4$ の倍数.
- $l=1$ かつ $r\equiv 3\pmod{4}$.($l=0$ として上のパターンと解釈できる)
E. Covering Points with Circles
最密充填的な並べ方をします.$H$ を $\sqrt{3}R$ 程度にとり, $(iR,jH)$ であって $i+j\equiv 0\pmod{2}$ というようにします.
これをランダムにずらすと,各点ごとに,$90.6\%$ 程度の確率で被覆されます.ずらす量を乱択して,目標の $89\%$ 以上になるまでやります.
ずらす量が整数なので,この条件化でその確率になるかは検証していないのですが,まあそのための $R\geq 100$ という問題設定だと信じました.
F. String Cutting
実は,ちょうど $K$ 個に分けるパターンしか見ないでよいです.
目標の $ANS$ を決め打って,最適解をひとつとります.
分割を,$ANS$ 未満を $0$,$ANS$ 以上を $1$ として $01$ 列として表すと,全部で $K$ 個以上かつ $0$ の個数が $K-1$ 個以下です.
全体が $K+1$ 個以上ある間,「$10$ や $11$ を $1$ に置換」という操作をします.
これをやり切っても $K+1$ 個以上になっているとすると,$00000001$ というタイプです.このときは $00$ を適当にまとめます($0$ または $1$ に置換されます).
これで $1$ が存在するような長さ $K$ の $01$ 列に変換可能です.$K=1$ かつ $01$ というタイプになっているときが問題ですが,$K=1$ のときには $0$ があってはいけないのでこれも考えなくてよいです.
よって,ちょうど $K$ 個に分割する問題を考えます.すると,目標は「max の最大化」となります.よって「$K$ 個に分割して,好きにひとつ選んだもの」の最大化になります.
あとは,$L$ を固定して,$[L,R)$ の形の解を考慮するのですが,ちょうど $K$ 個の分割にできるようなもののうちで一番長いものを ANS の候補とします.
候補となる部分文字列が $O(N)$ 個になったので,あとは suffix array などで比較します.
G. Simple Problem
【未証明パートあり】
互いに素だと任意の始点でパスを作れる,というのを帰納法で示していく感じです.
$n-1$ 個時点での最大公約数を $g$ として,$n$ 番目の数を $c$ とします.
$g=1$ だったら $n-1$ 個時点でのそれが満たします.
- $x\equiv 0\pmod{g}$ となる $x$ 全体でパスを作る
- $x\equiv c\pmod{g}$ となる $x$ 全体でパスを作る
- $x\equiv 2c\pmod{g}$ となる $x$ 全体でパスを作る
などとしてこれらを結合します.結合部分は $x\to x+c$ とします.
このとき要請として,$x+c<N$ が来ます.
これが大丈夫なのかは検証していないのですが,帰納法の base step でパスの終点を最小化しておけばたぶん大丈夫なんじゃないかな?としたら通りました(きちんと証明していません).
まあダメだったらいくつかの部分を乱択して当たり待ちすれば,まず通るだろうとは思います.
