hogloidのブログ

へなちょこ

ICPC WF '18

に参加していました。今年は北京大会で、日程は大体4月15日-20日でした。

4/15

朝5時半ぐらいに起きて、羽田に向かう。東工大チームにも会う。
飛行機はよくあるBoeing777、椅子をリクライニングさせるとき後ろに倒れるんじゃなくて座ってる部分が前に伸びるタイプだから後ろを気にせずに済むし前の人に邪魔されることもない。(これはBoeing777のおかげかANAのおかげか知らないけど)
昼ごろついて、ICPC Hostの人にホテルまで送ってもらう。結構渋滞してて時間がかかった。チェックインすると3時ぐらい。
ホテルの部屋はかなり広くて綺麗。なぜかシャワーとトイレがガラス張り。
あまりに腹が減っているので、勝手に外に出て近くの店で肉まんと牛肉を頼む。英語が全く通じず困ったけど指差して注文して数だけは中国語で伝えられた。(まあ二人分で2個のつもりが1人あたり2個になっていたんですが…)
ホテルに戻って、registration をやる。ライブラリとかももう預けないといけない。いろんなギフトが多くて、持つのが大変。
夕食を食べる。ホテルのバイキングだけど結構おいしい。あまり中華料理要素はないけど。ちなみにバイキングはこの後ずっと同じ形式で、出てくるものもあまり変わらないので後半は飽きてきた。

4/16

この日は午前はスポンサーの講義があり、午後は知恵の輪とかイライラ棒とかVRゲームとか伝統文化の遊びとかを体験できるブースで遊んだ。VRスキーがかなりすごくて、すごい勢いで(ゲーム内で)ジャンプしたときは思わず(現実で)尻もち付きそうになった。

終わると3時前には暇になってしまい、しょうがないので1人で勝手に地下鉄に乗って北海公園とか天安門広場とかを歩く。この後もずっとそうだけど、1,2時間程度の暇な時間があらゆるところに挟まってて、とても時間を持て余すことになる。ワルシャワ大会とかは予定が詰まりすぎてたらしいからその反省かもしれないが…
そのまま1人で北京大学に行って、歓迎オーケストラみたいなのを聴く。ただナレーションが英語と中国語を交互に使うので何話してるのかよく分からなかった。

あと、昼ごはんの後では MIT のksunさんを含むチームと話した。うち1人は全くコーディングをしないらしく、多くのコードはksunさんが書くと言ってた。チームも校内予選の2日前に決めたらしい。後で分かったことだがこのチームはIMO金メダル8枚チームで、ここまで偏ることもなかなか珍しい。

4/17

この日は万里の長城に朝早くから向かった。北京から一番近いところで50kmぐらいしか離れてない。
予想以上の急勾配ですぐに喉が乾く。ただ一番きついのは最初で、その後は割とどうにかなる勾配だった。
1時間ぐらい登って、また降りて、あとは色んな建物を物色した。
午後は開会式があったが、本当に普通で特に何も覚えてない。

4/18

この日は朝早くから Dress Rehearsal(要はプラクティス) に向かった。問題はWFの過去問で、ただ不勉強なので普通に知らない問題が出てきた。6問だけど初見で全部通すのは難しい。
午後は北京大学のツアーに行くはずが、これまた連れてって貰うまでの時間が長すぎたので勝手に歩きだしていると、先生(と先生の研究室の学生)に偶然会ったので、案内してもらう。北京大の北の方はだいたい庭園がそのまま残されていてメチャクチャ広いし綺麗。
さらに北には円明園があり、ここでも池を眺めながら屋台料理を食べたり、壊された庭園を見て回った。

4/19

この日はついにコンテストがあり、やっぱり朝早くから起こされる。6:30に起きたが、色んなところで待たされコンテストが始まるのは10時少し前。

始まると、とりあえずABCD担当になる。ABは長いのでCを読む、ある辺について、片側が足りなくなるならその分は流さなきゃいけないのは当たり前なんだけど、それだけでイケるやんと勘違いしそうになる。幸いパソコンが回ってくるまで時間があったので間違いだと気づいた。
Bが解かれてるのでBを読む、まあ面倒なやるだけ。断続的にパソコンを使いつつ、KFの後に通す。
(でも、単語にid振って有向グラフ作ってdfsっぽくやると思ってるけど、それにしてはみんな速すぎると思う、楽な方針あるのかな)
次に解かれてるAを読み、かなりやるだけなので続けてやる。しかし突然謎のコンパイルエラーに悩まされ、全く原因が分からず数分お手上げになってしまう。冷静にとりあえずパソコンを明渡し、単にmaxの型が違うという問題だった(でも、エラーで表示された行数は確かに別の場所だったはずなのだが…)。Hと並行してやって、1WAののち通す。
Iの解法をdegwerから聞く。別に難しくはないのだが、入力の加工だったり反転だったり細かいところが面倒くさい。
Eと並行でかき揚げていく。ペナルティは大体諦めて、割とすぐ出すことにする。配列外参照で2回REした後TLEして、1行読む入力のcinをやめてgetchar()でparseは自分でやることにしたら通った…(そもそも最初はgets()を使っていたのだが、なぜかコンパイルできなかった)
後はCを考え分からず、Jはいくらなんでも大変すぎるので無理で、Gは幾何なので捨てた。Dはdegwerが、Eは藤原が取り組んでたので残りはあんまりやることがなく、コードを渡されてデバッグを少し助けたりした(ただDに関しては変わるスピードが速くてサンプル読み上げぐらいしかしなかった)
Dがなんとか20分前に通り、これでメダルは取れるかなと思った。
残りはEに注力した。EPSを変えて出すとかはダメで、コードを見てみると0除算とかnan系で怪しいのがあったのでそこは指摘した。
成り立つはずのassertを入れるとREになることが分かったのでおかしい箇所の検討はついていた。方程式が正しく解けていれば成り立つはずなのでかなり混乱していて、ラスト2分になりもう今から方程式を解き直す時間は明らかにないので、とりあえずREになりそうなら単にそのケースについて考えるのをやめることにすると、実はそれがちょうど正しいアルゴリズムになっていた(なんか考えになかった方程式の解が実はあって、そういうケースはそもそも答えにならないっぽい?)。めでたしめでたし。

Eが通った歓喜のシーン
2018 ICPC World Finals, Split screen - YouTube

終わった直後は、9割方銀メダルは取れてるだろう、金はさすがにないかなと思っていた。SJTUとNTUの人から何完か訊かれたが、とりあえず秘密にしておいた。弁当の残りを食べて、写真を取ったりした後セレモニー会場に向かう。
今年の Closing Ceremony はYesNoの具合が悪く、同じ表彰をやったり、突然運営の人が独唱を始めたりでユニークだった。いろんな情報から、SJTUとPKUのGが片方でも通ってないなら金っぽく、ほんまか?と内心思ってたが確かにそのとおりで、YesNo上だと一瞬1位になったりした後、無事金メダルが確定した。PKUのGも299って書いてあったから通らないだろうと思ってたが、実はキッチリ通していた、さすが(そもそも296分の提出で通ってたけど)。Asia 1位を逃したが、今年からなんか地域表彰が変わってAsia Pacific 1位の表彰になった(オセアニア1位がもらえなくなったUNSWくん…)。

ディナーはオリンピックスタジアムの近くのでかいホールでやった。あまり他チームとは話さなかったが、Um_nik が NRU HSE のコーチで来てたので、話しかけたりサインをもらったりした。その後はRecruitのHRの人に案内されて后海のバーに行って、浙江大の人たちと話した。うち1人はSnackDownでも会った人で、東方も知ってるみたい(!!!)なので、北京大で今度ZUNが講演することを伝えておいた。

4/20

起きて、食べて、空港でまた食べて、帰った。久しぶりにICPCの今までのイベントのツイートとか記事を漁り、懐かしい気分になった。