EGOI2023 参加記

EGOI2023に参加しました。

真面目な参加記は大会レポートとして提出したので、これは若干不真面目な参加記です。何かの参考になるかは分かりません。

問題のネタバレを含みます。

 

Day-1


持ち物の準備を終えて最終確認のために大会ホームページを覗いたところ、問題は難易度順に並んでいるとは限らないとの情報が追加されていた。
かなり動揺したが、普段から取れる部分点を取り切る戦略でやっていたのでむしろ私にとっては有利になるかもしれないと自分に言い聞かせて寝た。

 

 

Day0 出発


空港で壮行会をしてご飯を食べて飛行機に乗った。海外選手に配るためのサンリオグッズをたくさん支給された。

 

Day1 到着


飛行機に乗ったり電車に乗ったりしてホテルに着いた。選手のホテルと競技会場のLund University は距離が近く、移動が楽だった。


昼食はお弁当のような感じで競技会場にあるgame room で食べた。事前に北欧の食事は野菜が多いと言われてはいたが、予想以上に野菜が多く(というかほぼ100%生野菜で)驚いた。この日の夜ご飯もパスタのようなものも入っていたものの、ほぼ野菜と豆だった。


チェックインの時間までボードゲームをしていた。楽しかった。


ホテルと何か手違いがあったようで、チェックインしてから部屋に入れるまで数時間ほどあったのでロビーで話したりトランプをしたりした。他国の選手とも少し話した。日本から来ているというと、ついこの間までIMOで日本にいたと言う選手が何人かいて、すごいなーと思った。

 

Day2 開会式&プラクティス


開会式では偉い人が話すのを聞いたり楽器の演奏を聞いたりした。本当にEGOIに来たという実感が湧いてテンションが上がった。参加国の紹介がアルファベット順に国が呼ばれて呼ばれた国が立って手を振る(?)という形で、Iで始まる国が思っていたよりも多くJapanがいつ呼ばれるかとずっとヒヤヒヤしていた。


昼食は学食のようなところで食べた。肉がないことに変わりはなかったが、Day1よりも美味しく感じた。温かい食事の大切さを実感した。


何気なく大会ホームページを確認すると、問題は難易度順に並べるという変更が書かれていた。今まで難易度順のバチャで練習してきたので、慣れた形式になることが分かって安心。


ラクティスは出入り自由で緩めの雰囲気を予想していたが、実際は競技会場へ持ち込めるものは本番と同じもののみに制限されていたりプラクティス終了まで会場から出ることは許されなかったりと思っていたよりも厳格だった。


ラクティス開始時刻が延長され、その間競技会場で他国の選手とおしゃべりをした。日本選手が周りに1人もいない状態で完全英語空間に放り込まれて少し心細かった。わーっと話しかけられても答えられないので、ずっとリンゴを齧っていることでその場を乗り切った。


ラクティス開始直後、キーボードの設定を変えようとしたが変え方が分からずすぐにtechnical issueを出した。これは事前に仮想マシンを確認した時に曖昧にしてしまったところだったので、プラクティスで解決できてよかった。一方で、キーボードの配列が普段使うJapanese(Mozc)に設定できず、「|」の記号がそのままでは入力できないことも分かった。これは後に、英語配列に設定を変えれば入力ができると教えてもらった。
ラクティス開始からしばらく経つと、団長たちが競技会場に入れるようになった。来てくれた副団長を見て少し安心した。

 

Day3 競技1


結論からいうと 100 + 65 + 27 + 15 = 207 で、多少余裕をもっての銀メダル圏内だった。
実は開始40分頃で一度1位になっていたらしい。すごい!(実装の楽な愚直な部分点をとりに行っていただけなので特に凄くはない。)


3問目は普段communicationは自明な部分点までしか取れないことが多いが、今回はその一つ先まで解くことができたので嬉しかった。ただ、graderがPythonで書かれているのが若干扱いづらく感じた。

2問目の満点解法のすぐ近くまで行けていたのでこれを通せなかったのが若干悔しくはあるが、全体としては取れるところは大体取り切れたように思う。

 

Day4 Excursion


動物園に行った。夏なのに寒かった。さすが北欧。
キャッシュレス化が進んでいて現金を使えないところがあると事前に聞いていたはものの、本当に動物園で現金が使えず驚いた。海外に行くならカードは持って行くべき。


夕飯はビーチでバーベキューだった。バーベキューと言っても焼かれていたのはチキンとチーズだけだった。私は直前のバスで酔ったのでジュースばかり飲んでいた。陸にいるだけでも寒いのに海で泳いでいる人たちがいて信じられなかった。後で聞いたところによると、水中の方が暖かかったらしい。確かに(?)。
他国の選手からカードゲームに誘ってもらい、人狼のようなゲームをした。英語でルールを理解するのは難しかったが面白かった。大会のTシャツに選手のサインを集めて回っている人がいて、いいアイデアだと思った。
この時点でサンリオグッズがまだほとんど手付かずで残っている。どうしよう。

 

Day5 競技2


63 + 100 + 22 + 10 = 195
競技1と合わせると 207 + 195 = 402 で銀メダル。
日本選手は全員銀メダル以上だった。すごい!!!
1日目より2日目の方が点数が高い選手が多い中で、私は2日目の方が難しく感じたし実際点数も悪かった。春合宿でも思ったがどうやら私の感覚は他の人とはずれているらしい。


1問目はグラフで考える方針から抜け出せず満点が通せなかったのがかなり痛かった、と言いつつ解法を知った今でも解けた気がしないので、1問目の満点よりもとりやすそうな3問目の部分点をとりに行った戦略自体は間違っていなかったと思う。
2問目はとてもJOIチックなDP。ここで満点を出せたのが得点的にも精神的にも良かった。
3問目は部分点を狙いに行ったものの、考えるべき条件を一つ見落としていて小課題2までしか通せなかった。ラスト1時間ほどはこれの小課題3と格闘していた。
4問目は難しそうだったことに加え、1問目で満点が取れていなかったので自明な部分点だけ取って1問目に戻った。

 

Day6 閉会式


午前中はスポンサーイベント。他の選手の助けも借りてお土産をたくさん配ることができた。
午後は閉会式だった。開始前に両隣の席にサンリオグッズを渡し、ついにお土産を配り切った。


閉会式後は夕食とパーティーがあった。パーティーは日付を超えて行うと知ってとても驚いた。私は疲れていたのでパーティーには出ずに帰らせてもらった。

 

Day7 出発


電車に乗ったり飛行機に乗ったり空港でお土産を買ったりした。

 

Day8 帰国


日本に帰ってきた。暑い。

 

 

JOIG2023 春季トレーニング 参加記

JOIG 2022/2023の春季トレーニングに参加しました。

問題のネタバレありです。

 

~Day -1

 

直近1年の精進はこんな感じ。↓

Heatmap

気が向いた時にABCに出ていた。特に最近はほとんどパソコンに触れられておらず春合宿に参加するかどうかもかなり悩んだが、色々な人と交流できる機会だと思って参加することにした。

3月に無駄に忙しいスケジュールを組んでしまい、春合宿開始前から既に体力的に限界。腕慣らしのために久々に出たABCでは3完という素晴らしい成績()を残した。

 

Day0(表彰式&交流会)

駅さえ間違えなければ大丈夫だと思っていたらその後思いっきり迷った。安田講堂は東大生でもなかなか入れない場所らしく、貴重な体験をさせて貰った。

 

その後の交流会では沢山の人と話すことができた!……と書きたいところではあるが、ああいう場で自分から話しかけに行くのがあまり得意ではなく、話しているんだかぼけーっと突っ立っているんだかよく分からないまま終わってしまった。コミュ力欲しい。

 

夜はいい加減精進しないとな〜と思いながら、期限の迫った課題をやっていた。

 

Day1(プラクティス)

去年の春合宿やJOI本選のプラクティスは割とサクサク捌ける感じだったのでそういう感じを予想していたら、普通にしっかりした問題でびっくり。問題数も多かった。

 

Addition

足すだけ!…のはずなのにTLE。cin/coutじゃダメやつだった。cin/coutの高速化は当日の朝に詰め込もうと思っていたので確認できてよかった。

来年がどうかは知らないが、今年の競技では実装上の注意に高速化のおまじないが書いてあった。感謝。

Airlines

解説を聞いて、そんなものもありましたね……という気持ちになった。

Stone Arranging2

JOI本選で解いたので飛ばす。

Ramen(Communication)

どこかで見覚えがある。部分点だけとって次へ。

Transmission(Communication)

今思えば4日目の問題にちょっと似ている気がする。

Santa Claus(Output Only)

ラクティスでは毎回Output Onlyが出ている割にJOIGの競技では一回も出たことがない。いつか出るんでしょうか……。

 

午後はEGOI2022の報告会とヒューリスティック問題のチーム戦。

問題はこれ↓

atcoder.jp

チーム戦とは名ばかりのほぼ個人プレイ。周りが易々と4桁の得点を出していく中、私は散々バグらせた挙句3桁までしか取れず。

同時に解いていたチューターの方々があっという間に高得点を叩き出していてすごかった。その後の解説もわかりやすくて、なんとなくヒューリスティックの雰囲気が掴めた気分になった。

 

夜は、精進した方がいいんだろうな〜と思いつつ、体力が限界だったので本を読んだりYouTubeを眺めていたりした。今思えば意外と悪くない選択だったのかも。

 

Day2(競技1)

ついに競技。

開始直前までマスコットをいじっていた。緊張しないで済むので他人の目が気にならなければ結構おすすめ。

 

去年の上位陣を眺めていて、なんだかんだ満点を狙った方がいいことが分かったので最低1完を死守することを目標に。JOIG本選では4位(得点分布からわかる情報)だったこともあり、それなりにいい順位が狙えそうと思っていた。問題が難易度順に並んでいるため、1問目から順番に解いていった。

 
Rochet Launching

小課題の制約が非常に意図的。個人的にとてもJOIらしい問題だと思う。小課題1から順に解いていったり図を書いたりしているうちに満点。ここまでで1時間強。

Teleporter

ゲーム系の問題は苦手なので小課題1しか取れないまま次へ。周りに差をつけられたのはこの問題。

Council

情報をビット列で持てば良いことまで辿り着いたものの、関数の名前をど忘れ。しばらくリファレンスを眺めても見つからなかったので途中で諦める。

この時思い出せなかったpopcount()はc++20からでしか使えず競技で使われていたのはc++17だったので、実は思い出せてもあまり意味がなかった。

Belt Conveyor(Communication)

問題文をよく読んでおらず、パスグラフという制約を勝手に加えたまま考察を進める。途中で入次数が3以上になり得ることに気づき、何もできないまま競技終了。

 

後半2問がJOIとの共通問題。

 

100 + 13 + 40 + 5 = 158

 

全体の感触は割といい感じ。取れる部分点はしっかりとったし、バグがとれないまま終わった問題もなかった。今の私にできる最良のムーブだったと思う。

 

昼食を食べていたら順位表が配られた。いつからそんなシステムになったんですか。

結果は8位。4~7位がかなり接戦でそこからさらに50点近く離された状態。周りのレベルがどんどん上がっていてすごいと思った。

 

夜は、もう精進してもしょうがないしな〜と思って呪術廻戦を読んだりハイキューを見たりしていた。

 

Day3(講義&交流)

午前中はかつっぱさんによる講義。精進の方法についてと(平衡)二分探索木の実装。

競技の解説を聞いていても思うけど、競プロ界隈の方々、説明やスライド作りがうまくて憧れます。

 

実装を始める前に紙の上でしっかり考察をすることを強調されていた。これは私も直近1年くらいで意識していたことだったのでなんとなく嬉しかった。

 

二分探索木の説明まで聞いた時点で頭が爆発しそうだったので実装に入った。周りを見ると平衡二分探索木の説明まで聞いて、実装もできている人が結構多そうだったのですごいなーと思った。技術がないくせに背伸びしてポインタで実装しようとしたところ当たり前のようにバグり散らかしたので、配列を使って実装し直そうとしたが時間切れ。プログラミングの基本をもっとちゃんと勉強したい。

 

IIJの方がいらしていて30分程度お話を伺った。お昼ご飯もIIJ持ちで、いつもよりちょっと豪華なお昼をいただいた。

 

午後はまったり交流会。競プロには全く関係のないゲーム(人狼など)で遊んだ。この交流会で全体的に仲良くなれた気がするので良かった。個人的には1日目にこっちの方がありがたかったかも……。

 

夜は、久しぶりにプロセカをやった。楽しかった。

 

Day4(競技2)

1回目の競技結果的に代表を狙っても仕方なさそうだったので、順位は気にせずに全力を出すことを目標にする。割り切ってしまえば全く緊張しなかった。あと、この日がたまたま好きな曲の配信開始日だったので朝から聴きまくった。そんなこんなでメンタル最強状態で競技に臨んだ。

 
Smartphone

問題文を読み終わった瞬間「区間スケジューリング問題」というワードが頭をよぎる。そのまま問題を眺めていると満点解法らしきものが降ってきたので考察もそこそこに実装開始。デバッグを頑張ると満点がとれた。ここまでで1時間弱。

この問題がサクッと解けたのがかなりアドバンテージになった気がする。

White Light

問題の内容と制約に加えて、JOIG春にまだDPが出ていなかったことからDPを確信。O(NK)のDPで小課題3までを通す。小課題4を取るにはKのループを無くせばいいことまでは分かったがやり方が思いつかず、諦めて次へ。

スライド最小値という典型問題だったらしい。知らなかった。また、それにたどり着けずともセグ木で殴ることもできたらしい。いい加減セグ木を実戦で使えるようになりたい。

Bitaro's travel

Q=1の場合は二分探索でどうにかできそうだったのでどうにかした。小課題3の制約が何かあるんだろうなと思いつつ使い道が分からなかった。

The Last Battle(Communication)

これが私にとって最後の情オリの競技になると思っていたので、問題名を見て少し感慨深くなる。時間をかけて考えれば点数を伸ばせそうな問題でかなり好みだった。

N=4は区画ごとに多数決を取る方針で簡単に実装できそうだったので通す。工夫すれば同じ方針でN=16もいけそうだと思ったので実装にかかったが、途中で考察ミスに気付いた。

解説の時に焼きなまし法というワードが出てきて驚いた。ヒューリスティック以外にも使いどころあったんですね。

 

2日目の競技よりもとっつきやすい問題が多いように感じたが、それを言った相手全員に否定された。私の感覚おかしいんですかね……。

 

この日のムーブもかなり最善に近かったと思う。今まで精進量の少なさゆえに典型問題への苦手意識があったが、最後の最後で典型の知識に救われた。

 

100 + 62 + 24 + 23 = 209

競技1と合わせると、158 + 209 = 367

 

昼食を食べた後はその辺をふらふらしていた。順位表が配られたとの噂を聞いたので向かうと、私の分の紙は既にその場から消えていた。どうして……。

仕方ないので他の人の紙を覗き見ると、競技2で3位、総合でも3位だった。びっくり。驚きすぎて変なリアクションをとってしまった。

色々な人の「結果は最終日まで分からない」的なツイートを自分で実証することになろうとは夢にも思わなかった。

 

ちなみに2位とは150点近く差があった。上位2人が強すぎ。

 

2日目の勝因(当社比)を適当に考察しておくと大体

  • 問題と相性が良かった
  • メンタル最強状態で頭が冴えていた
  • 1日目の競技でコツらしきものを掴んだ
  • 場数を踏んで5時間競技に慣れてきた
  • 最近受験数学をちょっと真面目にやっていた

みたいな感じ。

 

特にメンタル面に関しては自分が体力オバケではないことを自覚していて、毎日帰宅後は無理に精進したりせずに心を無にして各種コンテンツを消費していたことが結果的に私にとっては良かったのだと思う。ただの怠慢とも言えるが。

問題慣れに関しても、本当はバチャ等で慣れておくのが理想。

 

まとめ

EGOI2023の代表をさせて頂けることになりました。

現地開催でのEGOIが今からとても楽しみです。頑張ります。