合宿終わり

2・3・4日目の計3回練習大会が行われました。由緒あるチーム名の系譜:1代目icp.c、2代目icp.cpp、3代目icp.java←いまここ。…これってもうネタ切れじゃね???


id:chokudai…メインコーダー。がんばって欲しい。基本的に他の2人がサポート。
どるさん…アルゴリズム担当。豊富な時間を利用して数式を立ててしまっていたりして欲しい。
id:yappy…プログラムサポート。さすがにこういうレベルになってくるとプログラミング言語上でのめんどくさい事柄が出てきたりするので。あと英語エース(爆笑)らしい。おいおいおいおい。ついでにとんちんかんな発言をして他の2人の思考の邪魔をしたりとか。


2日目
2次元マップ上でバネを踏むと全床のうちどれかに等確率でジャンプする。最適な進み方をしたときのゴールまでの歩数の期待値を求めよ。的な問題で、バネを踏んだ時の残り歩数の期待値は飛ぶ可能性のある床のそれぞれの期待値の平均だから、ある値に固定して各床の期待値を出し、平均と一致するまで二分探索すればよくね?というどるさんのスーパーアイデアがバッチリ決まり、決め手になりやすい難易度中の1つをAccepted。
なお、私はEを作業。持ってきたライブラリがclass P(座標。むしろ(位置)ベクトルなんだが…。)を暗黙に仮定しているので任された。Pを定義し、線分同士の交差判定を丸写しし、線分ABがCDを1点を経由して迂回する場合と2点を経由して迂回する場合、それのAB/CDを入れ替えたパターンの4通りをコピペ&修正を駆使して作業。非常に危険な作業だった。部分部分でのテストをしっかり行いつつ、1発Accept。ヤリコミミセター。どこがやねん。


3日目
ビットDP*1の最適戦略の確率が通らず。最後の問題が実は簡単ということを発見し、私が作業に出る。コピペと例外処理(try-catchのアレではなくifで別処理)連発の生きてて申し訳なくなってくる後ろで見てるどるさんとの沸きプログラミングで完成させる。id:chokudai先生は心配そうに我々を見ていた。ここでどるさんがn=1(ビンゴカードの縦横サイズ)のとき、問題文のビンゴの定義より、ただ1つの数字が選ばれたとき、縦横斜め×2の4ビンゴではなく1ビンゴ扱いということを指摘。対処コードを入れるもTLE*2
詰まってしまったのでやけくそでJavaコードをC++コードに修正することに。作業者:yappy。int a[];→int *a;とかするだけでほとんどそのままのコードでいけた。JavaC++の互換性高すぎわろた。あとはスタック(ローカル変数)にばかでかい配列取って死んだのでstaticつけて追い出したりとかかな?
→Accept
わろっしゅ。調子に乗ってWrongAnswer*3確率の問題もC++にしてぱなす。
→Accept
我々はのたうちまわった。しかしのちに分かった真相とは…!
TLE…M=10^6のループでScanner#nextInt()を使ったのが問題。java.util.Scannerはscanf("%d")相当の仕事だけをするものではなく、正規表現を用いて汎用的に作られているのだ。なんだかんだで名前の通り普通に字句解析器として使えると思う。C++のstd::cinだと死ぬのでscanf()を使え問題は結構よくある話だが、Scannerは10^6で死ぬのね…。
WrongAnswer…System.out.println(double);で出力するとき指数部がやけに大きかったり小さかったりすると指数表記になるため(3.14E-10こんなの)、WrongAnswer扱いになっていた。
どちらも言語サポートの私がケアするべき問題だったので、やっちゃった系でしたね。どう考えてもやり込み足りてません。練習会でよかったということにして以後気をつけることにしました。
この修正2Acceptで6位くらいで耐えたんじゃなかったっけ。難易度の予測を外す問題の順番にうまくやられちゃった感じだったかなー。


4日目
英語問題きたー。が、別にそれほど問題にはならず、むしろid:chokudai先生が覚醒し、すべて1発Acceptで2位。最初の問題に取り組む時以外は比較的負担の小さい2人に和訳作業が追加されるだけで、コーダーに問題の内容を伝えるときに英文をほぼ読まなくて済むくらいの詳しさでしっかり伝えることになってむしろ効率がよくなっていたかもしれない。
私の作業内容は自作クラスのソートができないとか言い出したのでクラス定義を。Eclipseのコンストラクタ自動生成は強い。というかそれくらいはできるようにしておいたほうが…?
あと小数の出力はSystem.out.printf()を使うよう指摘。それほど極端な値は出てこなさそうだったけど一応。サスガニサスガニ。


まとめ:
2日目…PS2北斗のディスクを出してやったからなかなかの好成績だった。
3日目…北斗のディスクを出してやったから解けてた2問がC++で通って耐えた。
4日目…北斗のディスクを出してやっていたから2位というすごい成績だった。


いつの間にかid:toslunar出現。何年ぶりだろうか。
tos「なんか日記の大半が某格ゲーで埋め尽くされてるんだけどどういうことなの…」
yappy「いろいろあったんだよ…」
※北斗のことではなかったらしい。非想天則か。どちらにしろ格ゲーはやったことはないと訂正するのを忘れた。
そろそろこのブログの読者の層のカオスっぷりに気付くべき。


家に帰ったら、持ち帰られて再配達のお知らせが入っているだろうと思っていたポケモンメール便で郵便受けに入っていた。感動した。

*1:Dynamic Programming。動的計画法。業界用語ってやつだな。

*2:Time Limit Exceeded。時間切れ。実行時間が長すぎる。業界用語ですねー。

*3:どうでもいいけどよくわーにんぐとか言われるけどこれはろんぐあんさーって読まれるな。マジでどうでもいいな。