ICPC 2024 国内予選 参加記

眠い&疲れたので取り急ぎざっくりと 気が向いたらちゃんと書きます

new_textfileさんと漁師さんとチーム「novvcovv」で出てました。4完62位、学内1位で通過予定。

作戦

初動はlog_KがABをやり、漁師さんがC、new_textfileさんがDを見る。 それくらいしか作戦はなかった。

競技中

弊学はプリンター1台なので、問題文が来るまで時間がかかる。

A問題 (log_K, 2:21)

log_KがAの問題文を暗記→実装中に漁師さんがCを読む。

何故か if(n == 0) break;if(n == 0); と書いていて30秒ほどロス。

リハーサルのときもしょうもないバグを量産していたので「こいつ今日大丈夫かな…」と思いながら修正してAC。

B問題 (log_K, 10:30)

log_KがBの問題文を暗記→実装中に漁師さんがCを読む→解けたらしいのでDを漁師さんとnew_textfileさんが読む。この辺で問題文が届いた気がして2人はモニターから離れる。

入力を勘違い(現在位置が与えられると思っていた)していてコードを書き直す羽目になり炎上しかけたが、落ち着いて実装しなおしてAC。

C問題 (漁師, 12:55)

なんか爆速で解いてた。

D問題 (考察 new_textfile & log_K, 実装 log_K, 38:19)

Bを終えた後概要を読み、new_textfileさんに「愚直シミュレーションして、一定範囲外かループになったら良い感じに」と言われる。 101×101の盤面に次に進む方角の情報を加えた3次元配列上で良い感じにやれば良さそうだったので、実装を引き受ける。

一発でサンプルは合わなかったが、サンプルが優しく1ケースずつバグを修正して提出したら1発ACした。えらい。 この時点で15位(瞬間最高)だった。

E問題 (考察 new_textfile & 漁師, 実装 new_textfile, WA)

問題読んでいないので何も言えない。ただ聞いていた感じ答えが Yes のケースを No と判定して通らないっぽくて辛そうだった。

F問題 (考察 漁師 & log_K, 実装 log_K, no sub)

漁師さんとあーだこーだ言い合っていると答えが高々4枚で、コインの方からシミュレーションすれば良さそうということに気付く。 実装が面倒くさそうで嫌だな~と思っていたら漁師さんに丸投げされてしまったので、ペーパーコーディングで実装方針を詰める作業に。

ある程度詰めたところでEが沼ったらしいので交代するも、普通に実装方針がカスすぎて超重実装に。 当然サンプルが合わず、Eを優先していたのでバグチェックする余裕もなく終了。

振り返り

Eは本当に何とも言えないが、Fは解けるべきだなあと深く反省。 考察力・実装力が足りない自覚があるので、横浜までに鍛えないと…(あと黄コーダーになりたいです)

ICPC 2023 Asia Yokohama Regional 参加記

はじめに

初めまして。チーム「sankaKsu」のlX57(log_K)です。ICPC 2023 Asia Yokohama Regional(アジア地区予選)に出場したので、その参加記です。

国内予選で学内1位だったとはいえ全体59位での通過だったので、WFを狙うというよりは一連の大会を楽しむ事をモットーに参加してきました。

行動録

0日目(11/24)

日中までに簡易ライブラリを整備しておこうと思っていたんですが、前日27時就寝だったこともあり数ヶ月切っておらずあまりにももっさりしていた髪をどうにかするために景気付けの散髪をした後部室で爆睡します。夜に労働を終えてから慌てて準備しました。

最終的には以下のライブラリを持っていきました。

  • グラフ・フロー系
    • ダイクストラ
    • ベルマンフォード
    • ワーシャルフロイド
    • 強連結成分分解
    • HL分解
    • 最大流(Dinic法)
    • 最小費用流(Primal Dual法)
  • データ構造系
    • セグメント木(通常・双対・遅延)
    • UnionFind
  • その他
    • テンプレ
    • ModInt
    • 組合せ

正直ダイクストラとかUnionFindとかならソラで書けるんですが、変にバグらせたくないので用意しました。我が家にプリンターがないのでチームメイトのSakasu君に印刷をお願いします。

そして荷造りをして24時半に寝ました。ここ数日の僕の就寝時刻が27時〜30時だったことを考えるとめちゃくちゃ早寝ですね。参考になるか分かりませんが持ち物は以下の通りでした。

  • 競技関連
    • 蟻本・鉄則本
    • コピー用紙
    • ぬいぐるみ
  • 生活関連
    • スマホiPad一式
    • モバイルバッテリー
    • 財布
    • 着替え(2日目の服と部屋着)
  • パソコン一式
  • 筆記用具

1日目

8時半にアラームをセットしていたのに7時前に叩き起こされて悲しくなります。いつも不健康な生活を送っているので、7時前に起きたのはめちゃくちゃ久しぶりです。睡眠アプリによると7/6ぶりだそうです。朝は昨晩のカレーを食べました。

10時にsunrize君・qLethonコーチと近くの駅で待ち合わせをしているので、それまで家でのんびりします。ついでにこれを書き始めます。これを書くのに使う写真とかいっぱい撮らなきゃな〜って思いつつルールを読んでいたらリハーサルでも会場内の写真は撮っちゃダメっぽいことが分かりほにょります。ほにょっていたらコーチが遅刻しました。

12時半に日本大通り駅に着弾する行程を組んでましたが、なんやかんや20分くらい早く到着します。会場の雰囲気にわくわくしたり、Tシャツににこにこしたりして待っていました。

リハーサルが始まって、US配列に苦しみながらもCまで解いてなるほどね~ってなりながら印刷テストをしたらtotoriさんがめちゃくちゃニヤニヤしながら届けてくれてコーチ共々爆笑してしまいました。

自己紹介パートはSakasu君に丸投げしました。弊学は「Tokyo University of Agriculture and Technology」なんですが(長い)、Sakasu君がAgricultureとTechnologyを逆に言いかけてあわや東京工農大学になるところでした。

全行程終わった後宿泊場所のゲストハウスへ行き、荷物を置いてから横浜中華街でご飯を食べました。

この日のABCはなんやかんやあってUnratedで出ましたが、結構悲惨なことになりました。その後夜食を食べて風呂に入って個人比早めに寝ました。

2日目

7時に起きたので寝坊は回避しました。コーチと朝飯買いに外出たら雨が降ってて悲しくなります。

優雅に朝シャワーなどを浴びて会場に向かいましたが、着く頃には雨でびしゃびしゃになってました。来年は傘をちゃんと持ってきましょう。

なんかそれっぽい写真を撮ってそれっぽいツイートをして気合を入れます。自撮りって難しいですね。

席に着き、注意事項を聞いてコンテスト開始まで待機します。支給されていたおやつセットがメロンパン・ラムネ・チョコ・グミ・ポテトスティックなど充実していました(ところで僕の残りのおやつセットないんですけど、sunrize君かSakasu君にパクられたかな?)

9:30〜14:30 コンテスト

まずテンプレを写経してから、Aを読みます。解法は一瞬でしたが実装が割とあってびっくりします。特に沼にハマることなくAC。

次にBを読みます。 c の制約が小さく、\textrm{O}(nc) が通りそうなので実装しますがTLEします。その後尺取りを考えるもサンプルが合わず、その間にチームメンバーがFを解いたらしいのでBと一緒に丸投げして、一旦別の問題を読みます。ここまで1時間です。

Bの事は忘れてDを読みます。文字列長 n に対して文字列ハッシュ+区間DPの \textrm{O}(n^{3}) が思い浮かぶので、紙で考察をまとめつつ頃合いを見て交代、実装します。途中で何度かバグを踏んで実装に手こずりますがなんとかサンプルが通ったので投げるとWAが帰って悲しくなります。悲しくなったのでまた交代します。

相変わらずチームメンバーにBを丸投げして、僕はDの粗探しをしますがバグを直して提出→WA、ハッシュ衝突を疑い変えてみる→WAとことごとく落とされこれも一旦諦めます。

GとKを読み、Kの方が行けそうなので実装します。自分の解法では最悪ケースちょうど1024回クエリを消化するのですが、これもWAを吐いてきます。

合間合間にチームメンバーがBの修正→提出をやっていましたがどれも落とされ、結局2完55位という成績に終わりました。

解説パート・結果発表

解説パートが始まる前の小休憩の時間に、近くのテーブルにJAG夏合宿で同室だったまーたさんを見つけたので難しいねという話をしていました。(チームmasamune自体は6完してました、凄い)

肝心の解説パートですが、Bが \textrm{O}(nc) でも通せるみたいなこととDが凄い簡単そうに解説されてたのとKがディスク内の1点が分かると追加で4回クエリをすることで特定できるのが何故なのか分からなくて頭の中が「?」になってました。

結果発表パートは面白かったです。すべてのオンサイトであれやりませんか?

余談ですが持って行ったぬいぐるみが紹介されていました。ぬいぐるみの服と帽子は親が趣味で編んだもので、親は「実質優勝しました」と言っていました。

交流会

コンテスト中に色々食べたせいで全然お腹が減っておらず、あまり食べられませんでした。というか提供されていたメニューのカロリーが軒並み高くて笑ってました。

大学生になってからのオンサイトは初めてなので、ちゃんと交流ができるかめちゃくちゃ不安でしたが、交流会でもまーたさんと会話をしたのを皮切りにmasamuneの皆さんやおここさん、nok0さん、物理好きさん、hourenさん、熨斗袋さん、itigoさん、わくさん、olpheさん、kotamanegiさん、shobonvipさん、shinchanさんと色んな人と交流できて楽しかったです(あとJAG夏合宿で認知できていたのでSSRSさんにも挨拶をしましたが、自分の会話能力が低すぎて上手く会話できず変な人だと思われた気がします、すみません…)。

名刺を作っておくべきだなと思いました。もちろん作っていなかったのでいちいちTwitterのプロフィールを見せる人になってました。それと意外とTwitterが認知されててびっくりしました。

あとchokudaiさんとけんちょんさんと写真を撮っていただきました、本当にありがとうございました!

他にも企業の方から貴重なインターンのお話を伺ったり、謎のハウリングで耳を破壊されたり、スタッフが風船をすべて割って拍手が起きたりと楽しかったです。

帰路

デスク近くにぶら下がっていたラミネートされたチーム看板が思ったよりでかくてリュックに入らず手で持って帰りました。帰りの電車でめちゃくちゃ見られました。参加証と共に大事に部屋に飾っておこうと思います。

Day 3

25時に寝て、15時半に起きました。たっぷり14時間半寝ました。今11/28の午前2時にこれを書いていますが全く眠くなくて困っています。あと今週中間試験と中間レポートがあってやばいです。タスケテクダサイ

おわりに

去年のICPCは国内予選落ちだったので、今年はアジア予選に進出できてとても嬉しかったです。簡潔に参加記を書こうと思っていたのにここまで結構書いちゃったくらいには2日間楽しく、また有意義に過ごせたと思います。

ただ、肝心のコンテストは全く歯が立たず、応援してくださった同校の方々に良い結果を見せられず悔しかったです。国内予選時からAtCoderのレートが400くらい上がって、青コーダーになっていたので多少がなんとかできるだろうと思っていたのですが、青になっても何もできなかったです。来年は暖色になって国内予選に臨みたいと思います。

最後になりましたが、国内予選・アジア予選と共に戦ってくれたsankaKsuのsunrize君・Sakasu君、それからコーチのqLethonさん、当日応援してくださった農工大MCC競技プログラミング部門の皆さんおよび家族、そしてICPCの運営・スタッフ・審判団の皆さん本当にありがとうございました。