about me

Twitter: @kinaba

19:30 08/09/22

Google Code Jam APAC Local

Google Code Jam の Asia-Pacific 地区最終ラウンド、でした。 東京と北京とシドニーとあとどっかとどっかのグーグルのオフィスに集まって勝負。 この地区からは上位36人が決勝に進出……

まずページを開いてみて、Aは解けないこともなさそうなので（点数も低かったし）見切り発車で取りかかる。 …と思ったら意外と手こずって、switchで8方向分岐した上で摩訶不思議な場合分けを連発して定数時間で NOT BIRD/UNKNOWN を判定できるインデックスを作ったつもりになったものの勘違いしてて 1 wrong。 ⇒⇒⇒ ちょっと気分を落ち着けるために他の問題通そう。Small でいいから。→ Bは問題文の見た目が長い → Cはなんか小数点が見えた → DのSmallはnext_permutationするだけ問題だった。D解けた。 ⇒⇒⇒ 気分を落ち着けたら A は何一つ頑張らなくても O(NM) でいいことに気づいた。N,M ≦ 1000 て。 Small も Large も通った。変に焦るんじゃなかったよ… ⇒⇒⇒ B と C を読んでみる。B は全く方針の見当も付かない。Small すら自信持って挑めそうにない。捨て。 C を取るか D を取るか… C は焦らず考えれば必ず解ける気がする。Small の M=5 なんて最悪手で解けそうだし。 C に行こう。 ⇒⇒⇒ M = 0, 1, 2, 3 のケースを考えてみたら $1000000 / 2^M ごとに確率が変わる分布になってるのがわかった。 漸化式愚直に書いたら O(2^2M) のアルゴリズムになってかなりギリギリだけど通るかな、と思って手元で M=15 のケースを 走らせたら5秒で終わったので、最大の100個来ても500秒、まあ全部M=15ということは 無いだろうから間に合うよきっと、と思いつつも念のため微妙にループ最内周を弄ったりしてからトライ。通った。OK。 あとで気づいたけど、このDPは1回走らせて全部表を覚えておけば済むので余裕で 5+α 秒で終われたな…。 ⇒⇒⇒ 残り10分Bの全探索でも書き終わるかどうか試してみるかー → 書き終わらず。終了。

という感じで 決勝進出！ できるみたいです。よっしゃ。