見出し画像

ICPC2024 国内予選 参加記 by sorachandu

備忘録です

はじめに

Imoriさん、Lunariaさんと共にチームAizu_LISで出場しました。全員AtCoder緑です。
A,B,Cの3完で156位/363チームでした。

~ 模擬国内予選

初のICPCで、競技ルール周りが特有であまり知らなかったので、今年は慣れ程度で出られたらいいかなと思っていました。競プロの本格的なチーム戦も初だったので、なおさら。

チーム決めにはAtCoderのレーティングが用いられるようで、当時noshinnさんとちょうど同レーティングだったので0次予選が始まっていました。
こちらが青パフォ大勝して「やったか!?」をしているとnoshinnさんも大勝で追いついてきて、その後私の自滅が決め手となり、0次予選敗退しました。ARC179をRatedにしていたら勝っていたのに…

そこからはチームメンバー間で得意分野を共有したり、チーム練をしたりしました。
Imoriさんはデータ構造(ライブラリで殴る系?)に強く、Lunariaさんは (主観ですが) ARCチックな考察問に強い気がします。sorachanduは…何?低難易度帯の速解き?しかし自機以外の環境だと不慣れで著しく速度が低下するので、低難易度帯もImoriさんに任せていました…
準備期間中、Imoriさんがライブラリとか環境構築周りをどんどん進めてくれてありがたかったです。

チーム名の由来は頭文字を繋げるとLongest Increase SubsequenceのLISと合致するところからです。LISだけだと他チームと被るかなとビビってAizu_を加えましたが、要らなかったっぽい。

あとNPCAPC 2024にも参加しました。C,L,Mの3完。バチャではないチーム戦は初でしたが、長丁場でキツイなぁと思った記憶があります。CはLunariaさん、Lはsorachandu、Mは考察Imoriさんで実装Lunariaさんだった気がします。

チーム名Aizu_LISにしなかったの、なぜなんだ… (命名は私)

模擬国内予選

早めに集合してリハーサルをしました。いつもとは大きく異なる形式のジャッジサイトでしたが、時間的余裕もあったのでそこそこに動作を把握。えらい。

競技開始直後に鯖落ち延期という某最大手競プロサイトみたいなトラブルが発生してびっくりしましたが、気を取り直して開始。

全員で問題に軽く目を通し、Aはやるだけであることを確認。印刷した問題文を運んでいる間にImoriさんがAを通していました。
Bを読むと、やや面倒だけどindexを持って問題文通りやればOKっぽかったので実装。std::insertとかは使わずにstd::string同士を+演算子でくっつける感じに書きました。
その後、C,D,E,Gなどを行ったり来たりしながら各々考えていきましたが、解けず。

A,Bの2完でした。CはLunariaさんの考察が合っていそうでしたが、O(N^3)は間に合わないと勘違いしていたゆえに通せませんでした。実行時間が実質5分ほどある罠(?)に負けてしまいましたが、模擬のうちに嵌ったのでギリセーフという話になりました。

国内予選

予選当日の朝になぜか散髪の予約を入れてしまったので、普通に早起きする羽目に。4か月弱くらい伸びきっていた髪が短くなったので、爽快ではありました。

昼からリハーサルや確認事項のために集まりましたが、一瞬で終わってしまい超暇に。本来受けるはずだった範囲の力学の課題を睨んだり、アイスを食べたりして時間を潰していました。ほかの人たちもオフという感じだったので、予選直前になっても休み気分が抜けず「本当に今から予選なんですか?」という感じになっていました。

作戦としては今まで通り、とりあえず軽く読む → プリンターが空いたら印刷 → 順次やる でした。
私はいつも通り印刷物を回収。今回からは各問題を2部刷って1部はホッチキス留めする戦法に出たので、そのまま留め作業もしました。

その間にImoriさんがAを実装、AC。
続けてLunariaさんがCを、ImoriさんがBを実装、AC。
滑り出しは順調。私が担当するDを通せば、とりあえず4完で一息つける感じでした。

さてD、少し考えると「サイクルを見つければ終わりっぽそう」という方針を得られました。サイクル検出に関しても障害物の範囲の制約が小さいので、愚直でOKそう。PCも空いていたので実装に移ります。
動きを愚直シミュレートして、座標が負になるか101以上になればずっと直進、同じマスを踏めばサイクルなので長さで割ってよしなにやればいいですねーと実装。しかし座標だけでなく、方角もseen配列に記録させる必要があることに途中で気づきます。まぁこれは軽微な修正程度で済むので続行。
さらに進めると、サイクル検出途中でdを超えるパターンでつっかえます。適当にboolフラグを持たせて続行。サイクル無く直進可能なパターンでも適当にboolフラグを持たせます。
ここらで見事にスパゲティコードになっていました。一応書き上げたので、「バグらないでくれよ…」と思いながら実行。しかし無情にもサンプル一発目からバグが。
コードを睨むと、紙とコード上でx,y座標の順番が逆転していたり、後でも使いたい変数を直接いじっていたりと最悪なミスを連発していました。しかも一個直しても次のサンプルがまた合わない、の繰り返し。

方針自体は自明枠なのにPCを占領しすぎで、結構な焦りが出てきます。LunariaさんにEの実装を譲ったり、バグっぽそうな部分を思い出してはPC操作権を奪ったりしましたが、一向に改善せず。
E、サンプルが通り実装が終わったかと思われましたが、WA。この時点で競技開始から2時間は経過していたはず。
堂々巡りだったので、ImoriさんがDを1から再実装し、それを見守るペアコーディング体制に移ります。
LunariaさんのE実装も並行しながらDを実装、競技終了6分前くらいに完成したので実行します。しかし範囲外参照を踏んでいるらしくサンプルで落ちる。結局DもEも通せず、3完で終了しました。

競技終了後はうっすらとした脱力感に包まれました。仮にもチーム内でレーティング最高なのに、印刷物運び以外で何一つ貢献できず挙句に戦犯をやってしまったので、カスだなぁという気持ちに。練習ではここまで足を引っ張ったことがなかったので、殊更に。
チーム全員が不完全燃焼という感じで、完全にお通夜ムード。
しかし落ち込んでいても仕方がないので、気を取り直して他の人の解法を聞くなどしていました。

反省など

Dで焦って実装に入ったのが間違いで、もっと実装方針を詰めてから実装するべきでした。書きながら仕様変更を繰り返したらバグるのも当然なので。
E問題も方針は合っていたそうで、全体的に実装力不足を痛感させられる形となりました。ICPCの過去問をあまり解いていなかったのが悪い意味で効いていそう。

Domestic
Regional

バチャに出るときはsorachanduのアカウントではないときも多いとはいえ、これは流石に少なすぎると思うので…

Fはコインから動かす方針は合っていたものの、45度回転?してどうする?みたいな感じで拡張ユークリッドの互除法には辿り着けていませんでした。そもそも、多分誰も拡張ユークリッドの互除法を知らなかった。

他チームの人たちが延長戦を21時くらいまでやっていて、体力すごいなぁと思っていました。他チームの人たちも交えながらBig Boyで食事。
注文が遅くなりすぎたら申し訳ないなとか、財布が気になるなとか色々思っていたところライスを頼み忘れていました。誠に遺憾。

正直、学内でのチーム序列としては4/6相当で、同校制限もあって予選突破はまぁ厳しいかな…?とは思っていました。しかし、いざ終わってみると想像以上に悔しいもので、次までにはもっと強くなりたいなという気持ちになりました。
来年までにはAtCoderのレーティング1400超えを安定させたいかな(予選当時で1121)。
とりあえず早く水に戻らせてくれ。いや戻れるよう精進してくれという話。

ところで、SkyBlazeもSpinning-akabekoも強すぎないか?ここに勝てる日はくるのかな?

7完9位ってなんですか?すごい

ともかく悔しい点が多かったので、これをバネに強くなれたらなーと思います。ICPCへの活動を通して明らかに競プロへの意欲は高まったと思うので、いい加減まともな精進を再開したい。

あと3回は出場チャンスがあるはずなので、少なくとも1回は予選突破したいですね。今まで高校3年間でJOIもPCKも予選突破が叶わなかったので、大学では1回くらい大会の成果を挙げたい。マジで。
神戸と似ていそうな点では横浜という街自体にもかなり興味があるので、本当に是非行きたいです。大学の金で横浜に行けるなんて最高じゃん!!!

最後に、SkyBlazeとSpinning-akabekoの皆さんが横浜でも良い結果を出せるよう応援しています。頑張ってください!!!!

この記事が気に入ったらサポートをしてみませんか?