はじめに
ICPC2023 ではnoya2、shobon とAMATSUKAZEというチームで参加するため、模擬国内もこの3人で参加しました。
前日
大学のiMacで参加するため、iMacの環境がどうなってるか気になり適当にいじっていました。普段USキーボードを使用しているので、USキーボードを持参して接続したのですがずっとJISとして認識されていてどんだけ変更しても無理やりJISにしてきたので困っていました。
noyaくんを呼んで、noyaくんにも試してもらいました。なぜかUSになったので喜んでましたが、これが一大事件に発展するとは.....
当日(コンテスト前)
会場に10時半くらいに集まって、リハ・印刷・PC環境のチェックをやろうと言って集まりました。
noya「あれ、USキーボードにならないのですが」
ebi「え、昨日はできたのに~。再起動したりしてみるか」
~ 複数回の再起動と設定を行う ~
ebi「なんかUSになった」
ebi noya「(笑)」
印刷の確認をして、姑息なのでコピー機の近くのPCにしたいということになり席を移動すると
noya「USじゃないです」
ebi「そんな~」
~ 再起動や設定のし直し、PCの変更をやりまくる ~
ebi「え、USになりません」
めちゃくちゃ困っていると、監督をして下さる先生とコーチであるKejunさんが来たので相談するが解決せず困っていると
Kejunさん「イギリスPCに設定するとUSキーボードに近いキー配置になる」
ebi「そんなことある~?(笑)え、USキーボードもどきになったすご」
shobon「ポーランド語にすると印字と同じキーが打てます(笑)」
ということで、応急措置としてポーランド語でやることになりました。
当日(コンテスト中)
初動は
template打ち込み: ebi
A問題読む: shobon
Macのトラブル対応 + B問題読む: noya
でやりました。
トラブルが少しありましたが、Aが通り問題文の印刷が届いたのでBをnoyaくんが実装している間にebi shobonでCを考えてました。
ebi「え、むずい。貪欲じゃないとこんなのできないだろ」
shobon「priority_queueで上位2つ取るだけでは?」
ebi「めっちゃ嘘っぽい、このケースだとどうですか」
shobon「嘘でした」
と嘘を生やしては撃墜をしているとBが通り、noyaくんとebiがCを見てshobonくんは後ろを見るということにしました。
shobon「998です」
~ 数秒後 ~
shobon「FPSゲーです」
~ 数秒後 ~
shobon「解けた」
ということを隣でやっていたので、聴きに行くとそれっぽいことを主張していたが数え上げをしていたので
ebi「積の和ですよ」
shobon「ありがとうございます」
というやり取りをして、Cをうんうん考えているとDの考察が詰まったらしく
shobon「FPSの式立ったんだけど疎なpowがいります」
ebi「持ってきてないです」
modintが必要そうなので、modintを書く。
shobon「制約小さいから多項係数でいけます」
みたいなやりとりをしながらDを実装してもらう。ほどなくしてDが通る。
Cの考察をやっていると上位2つしか必要ないということがわかり一番デカい値はたくさん使い、その後上位2つを交互に使うのがよさそうとなる。
Cの実装ができたので出すと
Wrong Answer
と出て真顔に。印刷してFの愚直を書きたいと言ったshobonくんにPCを渡して考えていると、noyaくんに交互にやるのは最初にやる方がよくて、交互にやる回数を全探索すればいいと言われて確かにとなったのでPCを奪う。
Cを実装して、手元で作ったテストケースを試して合うことを確認してsubmit
Congratulations
となり一安心。その間にEとFの考察ができたらしくnoyaくんがEを実装、僕がG以降を見ることに。Gを見て、映画をグラフのノードとして完全グラフを考えると、巡回セールスマン問題になり困っていると、
shobon「これ、天才フローゲーです」
と言われて聞いているとなんかまともそうな解法が伝えられる。
Eの実装が難航しているので、印刷してもらいFをshobonくんが書く。愚直はサンプルがあったらしく、スパーズテーブルを書いて高速化するということらしい。EとFのPCswapが定期的に発生してどっちもバグりまくりらしい。このとき残り時間が30~40分くらいの時に4完でかなりやばいなという気持ちになっていた。僕はGの正当性と計算量を確認していると、shobonくんがFのコードの印刷を持ってきたので適当なことを言ってっているとshobonくんがスパーズテーブルの演算がmaxなのに足し算をしていたことに気づき無事直る。
Fを裏で回している間にEを頑張ってもらうと、Fの実行が終わり提出するとACになる(すごすぎ)。
残り15分くらいになりEのサンプルがあったのでテストケースをダウンロードするも、なんか x の値がマイナスになっていておかしいとなる。
shobon「線分の外側のやつって最小値にならなくないですか」
noya「そうじゃん、直すか~」
shobon「その部分を消したらよくないですか?」
消して実行するとまともな値が出る。diffがちゃんとあることを確認してsubmitするとACになりガッツポーズ。残り30分くらいで4完から6完になり、チームメイト強すぎ!となる。もう時間がないので雑談をしているとコンテストが終了。
結果は全体12位、現役内8位と横浜に出れる結果で一安心しました。
当日(コンテスト後)
近くにいたのしくんにFの高速な解法を聞くと、強いやつから処理して自分より右上左上右下左下の4つの領域から最も近いやつとの距離を2Dセグ木で求めるとできますと言われて確かにになりました。
かたずけが終わって順位表を眺めていると、東工大からは4チームがtop 10に入っているのでホスト校枠を考えると5チームが横浜に進出しているらしくひっくり返りました。
その後potato167、noya2、shobonで2Dセグ木の実装とか明日にあるトヨタコン予選の話をしながら時間をつぶしてココ壱に行きカレーを食べて帰りました。
感想
構文解析がでなくて残念でしたが(自分の担当なので)、面白い問題も多く楽しかったです。JAGの方々、監督の先生やコーチの方々ありがとうございます。
個人的反省点が多かったですが国内予選本番でも実力を発揮して、横浜大会に出場できるように頑張ります。