ABC300

4完。結果は酷いけど今の調子だとまあこんなもん。unratedだから順番に解いてたけど、さすがにもうちょっと、詰まったら次の問題を見る動きをしたほうがいい。

A - N-choice question

かんたんかと思ったらN択問題とか言ってきた。A+Bが来たら何番目か出力して抜ける。1分切れたのでよし。

B - Same Map in the RPG World

よく読んでないけどトーラス世界なんだろうなと思って書く。4重ループで時間はかかるけど簡単。

C - Cross

サイズ0のバツ印がないので楽。UnionFindで連結成分のサイズを求めて4で割ればいいというのはすぐ思いついたが、実装にめちゃくちゃ時間かかった。番兵置いて4方向を見る。

D - AABCC

cを全探索かなと思ったが、考えていくとかなり難しい。まずcを大きいほうから全探索、bの上限をしゃくとりみたく更新しながら、各bに対してaの範囲を求める。手元で1.4秒とかだったんで提出したがTLE。3300msより短いのでほんとにギリギリっぽい。そこで、aを求めるsqrtを前計算したが、細かいところが無限に合わなかった。こういう混乱の仕方久しぶりだな。なんとか合わせてAC。C++で2504msなのでダメ。

E - Dice Product 3

素因数は2と3と5しかないので、他のが入ってるやつは確率0で場合分け。また、回数とかは関係ないので1の目は出ないとしていい。最初、3次元空間を進んでいくイメージでやっていたが、その3重ループでは難しい。そもそも、Nは2^60より小さいので、60の5乗(は間に合わないかもしれないけど実際はずっと小さいので)の5重ループができる。5重は書く気が起きないので再帰にする。

さすがにコンテスト終了までに間に合うと思っていたら間に合わなかった。最後、2の目から5の目まで足して6の目を足してない作りになっているのを忘れていた。

難しかった。最初はNを超えたところを見ようとしていたが、最後5倍してNを超えた場合の出目は順番を入れ替えたら2倍を残してNを超えてしまうかもしれない。そこで、Nより小さいところを全探索し、最後に何が出たかを全部調べる。Nを超えなければスルー。超えたら、そうなる確率を求める。ここまで実装して気づいたけど、ちょうどNになる確率もNを超える確率も似た感じで求めることができる。

F - More Holidays

終了後に考えた。SがM個つながっていて、xを消す範囲がSの境界をまたぐかどうかで場合分けする。またがない場合、Sに対してしゃくとりすればいい(気づいてなかったけど、oの範囲が境界をまたぐ可能性も考えないといけない)。またぐとき、両端の半端は前計算しておけばいい。と思った。実装は面倒になってやってない。

(追記)ようやくAC。青diffの未ACが残ってるってことは、自分が嫌いなタイプなんだよね。今回も、なかなか方針がまとまらず、半日くらいかけてだらだらやってた。解説の二分探索はなるほど。自分の解法はしゃくとり。まずSに含まれる'x'の個数をカウントしておく(個数をxとする)。解説にもあるように、'o'が連続する区間の開始位置は左端からN通りを試せば十分(かなり混乱しながら辿り着いた)。そして、M個のブロックのうち左から2番目からmax(floor(K/x)-1, 0)個だけ間引く。M=1とかならそもそもKが小さいので間引かれない。残ったKはx以上x*2未満なので、間引かれた分は必ず使うし、Sを3ブロック用意しておけばその範囲で探索できる。つまり、現実的に計算が間に合う小さい問題に帰着される。自信はなかったけど提出したらACした。ACしたからもういいやってなるくらい嫌だった。

G - P-smooth number

D問題に似たものを感じるが、さすがに素数が多すぎてだめだ。