ABC134

5完早解き回なのでこんなもん。結果が微妙だから気持ちも微妙ではあるけど、先週のAGCと比べたらほんとに楽しめたのでよかった。あと、ノンペナでよかった(自分はわりとノンペナ多いけど、簡単なことでは全くないから)。開始前36.8、終了後36.7。

A - Dodecagon

最近ずっと問題文が5秒くらいで表示されていてよい。さて、「半径aの円に内接する正十二角形の面積」と言われてもすぐには求め方わからないのでビビる。仕方なく問題文にある通りに書く。

B - Golden Apple

こういう簡単な考察を入れさせるBってけっこう珍しいような。難易度はいつもと同じだけどタイプが全然違うので提出時にちょっと緊張した。

C - Exception Handling

こういうのよく出るね。累積GCDのときの下位互換みたいな?まあこれは簡単そうなのでそういうの関係なく考える。大抵、全体の最大値を出力することになるので場合分け。最大値でないものを選んだときは最大値になる。最大値を選んだときは、次にでかいやつ(同じやつも含む)。これで解けている。実装が微妙になった気もするが。

D - Preparing Boxes

「任意の」がちょっと読みづらくて警戒した。サンプルで雰囲気をつかんでからそこを読む。どう誤読しそうだと思ったのかもう思い出せない(問題を既に知っているため)。「すべての」でいい気がするけどなあ。あー、たとえば、「僕が任意に指定したiについてだけ条件を満たせばよい」みたいな誤読。いや「すべての」って書いてほしいよねここは。問題文は、問題文を信頼してゆっくり読んでいるので、石ころが落ちてたらちゃんと処理しないといけない。

内容自体もけっこう難しいが、そこは問題ない。図に書くとそこそこ疎なので、そこを利用できそうな気はする。約数はO(sqrt(N))で求まるというのも思い出す。しばらくして、図を見てひらめく。N番目の箱から見ていけばいい(a_Nに影響するのはN番目の箱だけ、N番目の箱を除けばa_(N-1)に影響するのはN-1番目の箱だけ)。「DでO(N*sqrt(N))が想定マジ?Python間に合うの?」とかいらんことを考える。これを0-indexedで書くのが異様に難しくて「そんなことある!?」ってなってた。ここは要復習。

解説を見る。下じゃなくて上を見るの天才か!?いや確かにそういうO(NlogN)も浮かんではいた。でも思いつかなかった。目に見えてる図しか見えないのは普通のことだと思う。いやこれは見えない。見る方向でこういう計算量の変わり方するというのも全然知らないパターンだ。俺は何も知らない。あと、-1を出力するって説明あるの忘れてた(まあこれは構成できてるので問題ない)。

E - Sequence Decomposing

問題名にある通り、数列をいくつかの増加列に分解する問題。貪欲に増加列をとっていくO(N^2)の解法がまず浮かぶ。具体例をいじりながらその証明を考えるが、もにもにしてなかなか進まない。LISっぽさを感じ、Chokudai SpeedRun 001の自分の提出を見ながら証明を考える。LISの2通りの実装を再理解するのにけっこう時間がかかる。そうしているうち、LISとは関係なく貪欲の証明ができそうに思えてくる。これ逆から見ても同じ問題にしかならないので難しいが。証明できたような気がしてたが思い出せないw とにかく、実装に入る。というかそれを実現する方法をまだ見つけてない。増加列を最大N個持ちながら進んでいく。LISのコードと同じになりそうで違う内容なのが難しい。std::setで行けそう。二分探索できる状態で値の挿入と削除ができるから。値の書き換えも、削除して挿入し直せばいい。最後のほうで気づいて​multisetにした。​multisetが役立つ場面なんてあるんだと意外に思った。提出時の不安は、実装が正しいかというのが大きかった(珍しい)(追記:あれ、普段も実装だった(実装にも色々あるんやね))。

解説を見る。あー、(まだ何も考えてないけど)天才っぽい。やっぱりLISなのか。ていうか、俺の提出はLISを求める別解法になってるってこと!?オーダー同じでも効率悪いかもしれないけど。それにしてもあの2つだけじゃないんだ。コンテスト中も「俺はLISを理解してない」と思ってたけど、これほど懐が深いとは。解説放送を見る。set要らないって言ってる。えーこれは別の方法じゃないってことか?確かに、挿入されるのが毎回最小の値になるの気づいてなかった。ほんと何も、何も。

F - Permutation Oddness

奇妙さの最大を求める。まあ逆順かと思うけど、一応実験もしてみる。意外と時間がないのでガンガン行く。ABCってほんと短いよね。n=4やn=5で最大値を求める。予想通りの値。そのときの順列も列挙してみる。ほー。最大値だけでなく、0から最大値までのそれぞれのkについて何通りかも出力させてみる。うん、これ足してn!になるんだよね。よくこんなの見つけるな。絶対OEISにありそうだけど、単にGoogle検索しただけでは出てこない。パスカルの三角形みたいにn=50まですべてを計算できそうに見えるが。規則性がありそうで見つからない。問題に立ち返っても、何もできない(nが一つ小さい問題に帰着させることができないのがつらい)。いや足して階乗になるの絶対面白いでしょ。解きたいなあと思った。

なんか青パフォじゃ満足できない体になってしまった感あり、この先の人生つらそう。Fが解きたい!めぐみんが爆裂魔法を撃ちたい気持ちに共感する。(今日の午後はこのすば一挙を見てた)