注意: 出題された問題のネタバレを含みます。
本選まで
一次予選: シードがあったので出ていません
二次予選: シードがあったので出ていません。その日は ISUCON に出ていました。ちなみに同じく代表の MtSaka くんと同じチームでした。
本選: なんか通りました。落ちなくてよかった。
Day 0
表彰式と交流会がありました。去年のトラウマがフラッシュバックしたこと以外覚えていません。
出題される問題は毎日 3 問で固定だというアナウンスがありました。プラクティスを全完しました。なお全完しても次の日以降に得られるメリットは特にありませんでした。今回の競技からルールが国際情報オリンピックに合わせて変わっていて、各テストケースについて完全なフィードバックが得られなくなっててびっくりしました。
Day 1
- 展覧会 3 (Exhibition 3)
- 占い 3 (Fortune Telling 3)
- ビ太郎の旅 2 (Bitaro’s Travel 2)
の 3 問が出題されました。
PC がすごく重く、3 回ほどフリーズして最終的に PC が交換されましたがそれでも重い、という状況が発生していました。(これについて 計 20 分の延長が認められました。)
展覧会 3 (Exhibition 3)
ほぼ自明な部分点 19 点を獲得しました。
占い 3 (Fortune Telling 3)
配布された手元でチェックする用のプログラムがバグっていました (そんな…)。 バグの指摘をしました。その後競技途中でチューターにどのくらいロスしたかを聞かれ、体感で 20 分と答えたところそのまま 20 分延長されてびっくりしました。結局考察をまともに詰めきれず、自明な 3 点しか得られませんでした。
ビ太郎の旅 2 (Bitaro’s Travel 2)
唯一の良心。頑張って実装すると満点が得られました。
Day 1 まとめ
普通に PC が重くてあまり競技どころではなかったです。合計 40 分延長されましたが、その時間で獲得できた点数は 0 点でした。悲しい。
合計 122 点で 8 位でした。代表ラインとの差は 21 点なのでまだなんとかなりそうでした。
解析の時間にチューターの方々と調査した結果、PC が重かった原因は仮想マシン内の systemd-resolved でした。Day 2 以降は disable されていたようで良かったです。
Day 2
- 救急車 (Ambulance)
- スタンプラリー 4 (Collecting Stamps 4)
- 宇宙怪盗 (Space Thief)
の 3 問が出題されました。
救急車 (Ambulance)
ほぼ自明な部分点 50 点を獲得しました。
スタンプラリー 4 (Collecting Stamps 4)
何もわからず 0 点でした。難しすぎそうでかなり早めに捨ててしまいましたが、ギャグの簡単枠だったようで自分以外の上位陣が軒並み 100 点を取っていて絶望しました。せめて自明部分点の 5 点は取っておけばよかったです。
宇宙怪盗 (Space Thief)
頑張って実装すると 22 点まで通りました。
Day 2 まとめ
合計 72 点でした。Day 2 だけの成績は 17 位, Day1 + Day2 は 13 位でした。代表ラインとの差は 122 点になりました。どう考えてもスタンプラリー 4 (Collecting Stamps 4) で大事故を起こしてる。
絶望しましたが、KoD さんのこんな言葉を思い出して頑張ろうと思いました。
2日でついた差は、2日あれば埋まるんですよ
— KoD (@d7511168) March 21, 2021
Day 3
- 勇者ビ太郎 3 (Bitaro the Brave 3)
- 会議 (Conference)
- マルチコミュニケーション (Multi Communication)
の 3 問が出題されました。
勇者ビ太郎 3 (Bitaro the Brave 3)
未証明ですが答えを関数として見た時に傾きが変わる地点は少なそうなので頑張ると 67 点が得られました。
会議 (Conference)
自明な部分点を取って 19 点でした。それ以外の部分点はほぼ不可能だったっぽいです。
マルチコミュニケーション (Multi Communication)
前日に「Output Only 出てくれ~」と言っていたら本当に出てびっくりしました。焼きなましをするぞ~という気持ちで問題を見るとただのパズル問題でした。僕の期待を返してほしい。適当にやると満点が得られました。
Day 3 まとめ
合計 186 点でした。Day 3 だけの成績は 1 位, Day1 + Day2 + Day3 は 10 位でした。代表ラインとの差は 68 点になりました。Day 2 に比べればかなり埋まりましたがかなり苦しかったです。
終わった後 会議 (Conference) の解説スライドの誤植を見つけるとお菓子がもらえるということで、数学以外の部分の誤植を指摘しました。特にほしいお菓子は無かったので任意のお菓子を控室の前方に置いてもらうよう依頼して徳を積みました。
Day 4
- 電子回路 2 (Circuit 2)
- 移住計画 (Migration Plan)
- ういろう (Uiro)
の 3 問が出題されました。前日までお世話になっていた ブドウ糖の inゼリー が無くなっていました。つらい。
電子回路 2 (Circuit 2)
頑張って 自明 / 直線の場合 (R=70) / 完全二分木の場合 (R=70) を実装すると 50 点が得られます。 そこから二分探索を適当に改造すると R=120 の場合でも点数が得られました。合計 66 点でした。
移住計画 (Migration Plan)
自明な部分点を取って 55 点でした。実装が大変めでした。
ういろう (Uiro)
適当に思いついた貪欲を投げると正の点数が得られるので、その貪欲の正当性を信じて高速化すると 80 点が得られます。そこから セグメント木 を Sparse Table に置き換えると満点が得られました。
Day 4 まとめ
合計 221 点でした。Day 4 だけの成績は 2 位, Day1 + Day2 + Day3 + Day4 は 4 位で代表になれました。
終わった後に差し入れとしてういろうが配られました。おいしかったです。
まとめ
2日でついた差が、本当に2日あれば埋まって感動しました。IOI も頑張ります。
おまけ
ここまでに入り切らなかった話たちです
ぼくのかんがえたさいきょうのコンパイルコマンド
g++ -D_GLIBCXX_DEBUG -fsanitize=undefined,address -fno-sanitize-recover=all -Wall -Wextra -Wshadow ./a.cpp
実際は競技開始してすぐターミナルに
alias xx='g++ -D_GLIBCXX_DEBUG -fsanitize=undefined,address -fno-sanitize-recover=all -Wall -Wextra -Wshadow'
を打って
xx ./a.cpp
でぼくのかんがえたさいきょうのコンパイルができるようにしていました。配列外参照とかをするとすぐ気付けるのでめちゃ便利です。
虫取り
毎日ライブラリのチェックとして 虫取り を解いていました。普通に毎日解くのは大変でした。バグの修正もだんだん速くできるようになってて感動。

ぬいぐるみ
持っていったレッサーパンダのぬいぐるみの目線の先にいる選手(自分含む)のパフォーマンスが下がるという法則を発見しました。多分たまたまです。
使ったテンプレート
MtSaka がすごい量のテンプレート書いててびっくり。 (彼のブログ参照)
逆に自分はテンプレートかなり少なかったです。
#pragma GCC optimize "Ofast,unroll-loops" #include <bits/stdc++.h> #define endl "\n" using namespace std; using ll = long long; int main(){ cin.tie(0); ios::sync_with_stdio(0); }
代表選手発表会でのコメント
問題: 連続部分文字列に「JOI」を含む、今の僕の心情を表すのにふさわしい「喜ぶ」という意味の英単語は何でしょう?