ARC145

3完。けっこう苦手感はあるが、レート微減で済んでるしやっぱ普通かも。

昼間yukicoderやろうとしてあまりにもやる気が出なくてびっくりした(ARC前にこれがわかるのは大きく、わりといい状態で臨めた)。少し考えて提出せず撤退。だいぶ競プロ飽きてるなあと思った。あと、プロセカでかなり大きいアプデがありそちらに気持ちを持ってかれていた。to do(アニメ見るとかワクチンの予約するとか)をなんとかギリギリで捌いていく日々。

A - AB Palindrome

ABを並べてみたり。AAABとABBBは作れるなとか思ったり。Nが偶数と奇数どっちが簡単か。半分で折って片方AB逆にするとか考えたけどダメ。とっかかりがなさすぎて考えることをさぼっているのかどうかすらわからなくなる。少しして、Aで始まりBで終わる文字列はNoだと気づく(始めと終わりは同じ文字にする必要があるがどちらも変えることができない)。じゃあ他はというと、A...AもB...BもYesだ(さっきのAAABとかを使い真ん中を全部同じ文字にする)。B...Aもそうだと思ったが、2文字の場合がどうかを含め4通り確認し直しているときにBAは回文にできないことがわかり(やっぱ最初は有力な解法か不明だから大雑把に考えるんだよね(まあそのための確認だけど))。15分かかった。

B - AB Game

AとBは、小さいほうが有利(最初混乱した)。Aが小さい(大きくない)場合を考えると、初手取れないときは負けだけど、それ以外は全部勝ち。Aでさえ取れないあまりをBは取れない。だいぶ単純な形になった。Bが小さいときは、1手進めて逆の立場になりさっきのケースに帰着されるので、相手が初手取れないようにするしかなく取れるだけ取るのが最適になる。ゲームnではn%AがB未満ならAの勝ち(ただしAが初手取れないときは負けなことに注意)。周期Aで考えることになるので、ゲーム0を含めたほうが楽。ゲーム0は先手負けなので含めても答えは変わらない。全体でN+1個あり、サイズAの塊のうち1個は全部負けで他はB個が勝ち。半端は最初のB個が勝ち(B個に満たないこともある)。

C - Split and Maximize

たぶん、大きい数から貪欲にペアにするのが最大。そこで2つの同じ順列(長さN)を組み合わせることを考える。たぶん、ここから別の同じ順列2つは取れないよな。どっちを1大きい数にするかで2^N通り、順列がN!通り。で、順列を合成するのが何通りかわからない。それっぽいの書いてみてもサンプル通らんし。重複を排除できないんだよな。DPは2乗になりそうだし。実験もしたけど普通に間違ってて無力感。なんもわからんのに粘着するのしょーもないのでDに行った。

難しそうなのでわりとすぐ帰ってきた。実験コードを書いた。順列を2個合わせたやつをnext_permutationで全探索し前から貪欲に2系統の0 1 2 3を取っていけるものをカウント。14という数を見たときほぼ確信したけど、ググってカタラン数だった。最初から最後まで何も証明してないけど順位表を見てペナが少ないことから合えば通ると思い実験をしていた。だいぶ遅い時間になってしまったがAC。

D - Non Arithmetic Progression Set

最初、-10 -2 0 1 5 のような同じ差が現れない数列を考えていたが、指数関数的に大きくなるのにNが1万なのでダメ。ほんとにそんなのできるのか?Cに戻る。

0から始めて前の項より大きい最小の条件を満たす数を追加する愚直コードを書いた。なるほど10^7には収まりそうな雰囲気を感じる。隣接する項の差をとってみると、なんか見たことある。OEISに突っ込むとそれっぽいのが1件ヒットする。書いてある通りに漸化式を実装して自分の愚直と途中まで合うことを確認。そしたらあとはできそうだ(方針はCを通す前に考えてあった)。もうコンテスト終わってるけど。数列全体を1ずらせばN単位で全体の和を増減させられる。半端は端で調節したいが、条件を気にしなくていいようにめっちゃ離しておく(4*10^6にした(絶対値が10^7に達することもない))。21分遅れでAC。