#1 のほうが参加しやすい時間だったのだが、体調不良で寝込んでいたので #2 に参加。
A. Double Cola
大学入試にたまに出てくる群数列の問題かと思ったが、サイクルをまとめてシミュレートしていけばよい。一周あたりの数は指数関数的に増えていくから、時間は足りる。
すぐ出した。
B. Sets
方針が立たずに、メモにごちゃごちゃ書いて考えていると、同じ紙の組み合わせで出現する数字は、同じ集合由来だと分かった。つまり、各数字ごとにどの紙に書いてあるかを hash<set<int> > 的なものに記録していって、これを転置すればよい。
Ruby でささっと書いた。n = 2 でもエラーにはなっていない。出した。ここまで30分ちょっと。
C. General Mobilization
時間ごとにシミュレートしていけば間に合うような、間に合わないような……
B. Sets
B 問題が落とされる。見ると、B が撃墜祭りになっている模様。10分くらい考えると、n = 2 のとき、自分のコードでは全ての数字が一つの集合に出てしまうことを発見。これは特別扱いが必要だ! コーナーケース n = 2を確認したつもりが、全然チェックできてなかったよ!
訂正して出す。
残り時間
C を考えるが、結局よく分からない。
B を自分も Lock して他人のコードを見るが、C++ で int 的な配列を使ってなにやらやっているコードが大半で、よく分からない。これらも n = 2 のケースで落とせるのだろうか? この時点の順位は 400位くらい、残り30分。このままでも通過に必要な500位には入れるだろうが、撃墜失敗すると危うい。……と考えているうちに、5つくらい他の人が落として行った。あー、もったいない、などと思いつつ離脱。
結果・考察
AB通る。373位。1709→1720。
B のコーナーケースを見落としていたのは痛い。n = 2 をテストしてたのに、実行時エラーにならないのを見て満足して、出力をよく見ていなかった。