ICPC2021 国内予選 参加記

日記競技プログラミング

The atamaで参戦して、全体5位、学内3位で予選通過しました!
2年前から参加していますが、29位→12位→5位の遷移で、過去最高順位でした!

順位表
スポンサーリンク

コンテスト開始まで

修士1年ということもあり、そこそこ忙しめだった。チーム練は模擬国内をチームで走ったくらいで、これといった練習はあまりできていなかったように思う。直前期になって慌てて AOJ-ICPC を埋め始めたが、あまり量は足りていない。

AOJ埋め

加えて、僕の生活習慣は乱れに乱れきっていて、16時就寝→23時起床、みたいな生活が続いていた。就寝時刻がコンテスト開始の直前なのはどう考えてもやばかった(が、コンテストが始まってしまえば結局なんとかなった。)

去年と同じように、コミュニケーションを重視した結果、僕と家に3人とも集まることになった。わざわざ来てくれたチームメイトに、感謝……

コンテスト中の流れ

模擬と同じように、MisterがA、okuraがB、自分がCを読むことにした。

C の問題を読んだ瞬間に構文解析であることがわかり、ギョッとした。というのも、3人でチーム練をしているときに自分が構文解析の問題を解いたことはなく、AOJの問題を埋めるときに何問か解いたくらい & だいたい実装で沼る、ということが分かっていたからである。おまけに問題文もめちゃめちゃ読みにくく、焦りパラメータが上がっていく。

「根を決めてしまえば木DPで値を計算するだけ」ということが分かったあたりで Mister が D を読んでいたので、C/D の swap を持ちかけた。しかし D を読んでもすぐには解法が出て来ず、しばらく考えると部分和問題に帰着できることがわかり、実装して(何回かバグらせて)AC。

無駄のありすぎるコード((sum – res) / 3 == v[0] なので)

Mister に C を、okura に E を任せ、F を読み始める(C も E も F もグラフの問題で、嫌だなあと思っていた)。途中 E の実装の細部の詰めに苦しんでいたので多少手助けに入る。C を通し終えた Mister が okura と一緒に E のデバッグを行い、しばらくすると E も通る。この時点で 5 完 3 位の成績だが、 F/G/H に易問があると容易にひっくり返るので、油断せず F を考察する。

必要十分条件っぽいものを提案し、これに基づいた実装を Mister が行い、横から口出しをするという流れで行った。残り 30 分くらいになったタイミングで根本的に嘘解法であったことがわかるものの、この時点で F を 3 チームくらいしか通していないので、祈り続けることにした。

コンテスト後

TLを眺めながら感想戦をしたあと、去年と同じように近所のレストランで夕食を食べて帰ってきた。(写真とか撮ればよかった。)

コンテストの反省

  • 今回は、チーム内でのコミュニケーションがうまくいっていたように思う。2 人で E のデバッグを一緒にやっていたことや、早めに C/D の swap を行えたことが結果的に勝ちに結びついたと思う。
  • Mister に頼りすぎている気がする。1ミリでも実装したくないなと思った問題はすぐ 2 人に投げてしまうので、もう少し自分の苦手問題を減らしていきたい。
  • F で嘘解法を提案してしまった。早解きの 5 完を達成できた時点で、負け筋があるとすれば「Fがある程度易問で、それなのに自分たちが解けない」というケースなので、難問である可能性を排除した上で、落とさないように慎重に考察するべきだった。「よくわからんけどこの考察が当たりだったとして進めよう!」は完全に真逆のアプローチ。

コメント