feature image

2025年12月4日 | ブログ記事

ICPC Taichung Regional 2025 参加記 (zoi_dayo視点)

この記事はアドベントカレンダー2025 4日目の記事です。

はじめに

24Bの @zoi_dayo です。普段はゲームを作ったり絵を描いたりたまに競プロをしたりしています。

11/15,16に開催された ICPC Taichung Regional に参加してきたので記事を書きます。

ICPC Regional ってなに

この記事を開く方なら知っているかもしれませんが、一応。

ICPCは大学対抗国際プログラミングコンテストです(略)。
いろいろ細かいルールがあるのですが、基本的に大学内で3人チームを組み、 地区予選 (日本予選) → Regional (日本大会) → Playoff (アジア太平洋大会) → World Final と進んでいくことになります。

東京科学大学は東大・京大に続く競技プログラミング強豪校であり、競技プログラミングのプレイヤーの層が非常に厚いです。しかもtraPが取りまとめるおかげでICPCへ参加するハードルが下がっており、地区予選には25チーム前後が出場します。

ここから日本上位n位までが勝ち抜ける...というルールであればよいのですが、同じ大学のチームばかりにならないように制約が掛けられています。これまた色々なルールがありややこしいのですが、科学大からは4チーム程度しかRegional (Yokohama) に進むことができません。これはAtCoderだと黄x3くらいのレベルだと思います。

僕のチームは予選で全国19位、学内6位だったのでYokohamaに進むことはできないということになります。しかし、別の国で開催されているRegionalで良い成績を残し、Yokohamaに出場した人のスコアを上回ることができれば、そのRegionalを経由する形でPlayoffに進出できます。これを狙うために台湾に行くわけですね。(普通に海外旅行たのしい)

チームメンバー

チーム「Tsukuyom1」です。合成音声のつくよみちゃんとは関係ありません。

ZOI (@zoi_dayo)

著者です。24Bで、情報理工学院 情報工学系です。
AtCoderギリ青ですが夏以降全然でてません。データ構造や木構造、分割統治などのアルゴリズムやLinuxの環境構築、ライブラリ整備などは得意寄りですが、算数や数学、パズルは苦手です。

ICPC2025 国内予選 参加記 (Tsukuyom1:zoi_dayo視点)
メンバー紹介 全員24B (学士2年) で、水青青の3人チームです。3人とも昨年のICPCには出ていましたが、この3人でチームが成立したのは今回のICPCからです。 Oxojo かなり昔から競技プログラミングをしているらしいです。メンバーの中で唯一(まともに)JOIの経験があり、AtCoderに限らず幅広い傾向の問題に対応してくれます。あとタイピングがめちゃくちゃ早い。traP内でも有数のはずです。 jupiter_68 もともとずっと数学とかパズルをやっていたらしく、昨年入学後に競技プログラミングを始めていました。ARCとかが得意な印象です。主に数学と構築を見かけたら任せることにしています。 zoi_dayo 筆者です。AtCoderは ZOIZOI で、最近あんまり出れていないけれど一応青コーダーをしています。AtCoder Beginner Contest以外の成績は悲惨です。 DP/SegmentTree/グラフ/木構造/再帰/環境構築 などが好きで、数学/パズル/構築/幾何/構文解析 が苦手です。 見て分かる通り、3人の得意分野がちょうど別れているので

Oxojo (@Oxojo)

24B 情報理工学院 数理計算科学系です。AtCoderは水ですが最近はあんまり出ていなさそうです。
チームで唯一まともにJOIをやっていた人で、計算幾何や数学、数え上げなどが得意です。あとタイピングがめちゃくちゃ早いです。さらにサウンドの活動もしていて、VTuberや伝統技能にも造詣が深いという謎の人物。

ICPC 2025 国内予選 参加記 (Oxojo 視点)
ICPC 2025 国内予選に参加しました。 チーム構成 * Oxojo (AtCoder: Oxojo) * ZOI (AtCoder: ZOIZOI) * jupiter (AtCoder: jupiter_68) 24B の中で 1・2 レベルに強い 2 人が来てくれました。 チーム名は Tsukuyom1 です。なんとなく日本っぽさがあるいい感じの名前を ChatGPT に考えてもらった 探した結果こうなりました。最後を 1 にした理由は、なんとなく見た目のバランスが良いかなと思ったからです。小文字の i でもあんま変わんないと思います。 練習 traP で行われる ICPC 練習会に参加したり、自分たちでセット練習をしたりしました。 個人的には初動がとにかく重要だと思っていたため、私が A、ZOI が B、jupiter が C
ICPC Taichung Regional 2025 (Oxojo 視点)
11/15 - 17 に台湾で行われた ICPC Taichung Regional 2025 に参加しました。 国内予選までの記録はこちらに書かれています ICPC 2025 国内予選 参加記 (Oxojo 視点)ICPC 2025 国内予選に参加しました。 チーム構成 * Oxojo (AtCoder: Oxojo) * ZOI (AtCoder: ZOIZOI) * jupiter (AtCoder: jupiter_68) 24B の中で 1・2 レベルに強い 2 人が来てくれました。 チーム名は Tsukuyom1 です。なんとなく日本っぽさがあるいい感じの名前を ChatGPT に考えてもらった 探した結果こうなりました。最後を 1 にした理由は、なんとなく見た目のバランスが良いかなと思ったからです。小文字の

jupiter (@jupiter_68)

24B 情報理工学院 数理計算科学系です。AtCoderは青上位とチーム内で最もレートが高いです。ABCに出ると冷えるらしいのでARCだけ出ているらしいです。
大学から競技プログラミング、というよりパソコンを使い始めたらしいのですが、中高でパズルをやっていたらしく、算数パズルや構築に特化しています。

...というように、全くタイプの違う3人のチームです。それぞれ得意分野がバラバラでわかりやすいため、問題のジャンルがわかったら誰が解くかがほぼ確定します。

それぞれのメンバーが得意な問題だけを解くことで、ICPCではAtCoderレートに比べて善戦できているんじゃないかと思います。

また、コーチとしてHemimorさんに引率していただきました。

日記

出発まで

国内予選までは全然海外Regionalのことなど考えていなかったのですが、国内予選の順位が思ったより良かったのでOxojoが提案してくれました。楽しいイベントが生えるなら参加する以外ないぜ! という感じで即OKしました。

せっかく海外まで行くわけなので、できるだけ準備はしておこうという話をしました。ICPCといえば国内予選、暖色とかの人はYokohamaに行くらしい、という考えで過ごしてきたため、「英語問題文・5時間」という形式には全く慣れていません。そこで、対面の5時間英語バチャをたくさん走ることにしました。はじめオンラインでもやってみたのですがあまりうまくいかず...
Taki Plazaに予約すれば誰でも使えるスペースがあったので、メンバーの予定が合う隙間を見つけてバチャ会を開催していました。UCupにも何回か出場しました。

また、国内予選では電子ライブラリの持ち込みが許可されていましたが、Regionalではきちんとライブラリの準備をしないといけません。kactlやICPC notebookを借りると良いらしいのですが、せっかくなので自分で作ることにしました。GitHub にあります。主な発想としては md+cpp→pdf ができればよいのですが、md→pdfの変換にあまりいい思い出がなかったので、Typstを利用することにしました。細かいことは別の記事で紹介します。たぶん2日後くらいに出ます。

ちまちまと改善を行い、最終的に出発前日の昼頃に完成版ができました。内容の多くは他のライブラリからお借りしてマクロだけ書き換えたものですが、ところどころ改造したり、あまり他ライブラリでは見かけないドキュメントも追加したりしています。「すべてを詰め込んだライブラリ」ではなく、あくまで「このメンバー・実力で本番中に役に立ちそうな内容」をまとめたものになっています。

海外遠征に関する諸々はほぼすべてHemimorさんにやっていただきました。ありがとうございます...!!!!

一日目

日本から台中への直通の飛行機を取るのは難しかったので、まずは成田空港から台北 (桃園) に飛ぶことになりました。成田空港が思ったより遠かったためそれなりに早く起きる必要があり、寝坊が怖かったので前日夕方〜深夜で寝て当日の朝6時くらいに大学に行きました。

大岡山で朝ごはんを食べて空港に向かったのですが、ちょうど通勤ラッシュと被ってしまい少し窮屈でした。

空港で少し迷いつつHemimorさんと合流し、荷物検査など作業を終えて軽く昼ご飯を食べました。空港の中だと全部高いですね...

どうやらOxojoとjupiterは飛行機が初めてらしく、楽しみですね〜と言いながら乗りました。HemimorさんとOxojo・jupiterは隣同士だったのになぜか僕だけいくつか離れた席になっていました。そんな...

飛行機の中では寝ようと思っていたのですが、結局Steamで買って積んでいたゲームをやっていました。

無事桃園に着陸しました。ここからはまず台北に移動し、台中に向かいます。ここでICカードを買っておきました。500元で400元入ったカードを購入できるのですが、ちょうど滞在中に使い切るくらいの量でよかったです。(1元=5円です)
台北→台中には新幹線のようなもの (HSR) を使います。チケット代だけ払っていてあとから実際の席と紐づけるみたいな取り方をしていたのですが、席がかなり埋まっていてめちゃくちゃ遅い時間、しかも2人づつしか取れないことがわかりました。しょうがないので2人づつ別の時間の電車に乗ることにしました。
本来は台中についてから色々考える予定だったのですが、仕方ないので台北でご飯を食べることにしました。適当に入った地下街にあまりレストランがなく、なんかめちゃくちゃガチャガチャとアニメグッズの店とゲーセンがありました。結局「日本食ラーメン」と書かれた謎の店でラーメンを食べました。ううむ...?

その後はHSRで台中に向かいます。

台北→台中への移動、既視感 pic.twitter.com/wYaxAOX8GF

— ZOI (@ZOI_dayo) November 14, 2025

台中駅についたと思ったら、どうやらHSRの台中駅は新烏日 (Xinwuri) といい、ホテル近くの台中駅は違うらしいです。ので、電車に乗って10分ほど移動します。

ホテルは The Enterpriser Hotel というところで、静かできれいな感じでした。がちょっと建物は古そうです。僕の部屋は全く問題なかったのですが、OxojoとHemimorさんの部屋はドアの下に大きな隙間があったらしいです。防音性...

お腹が空いたので、ホテルの前のファミマでカップラーメンを買って食べました。日本と同程度の密度でファミマとセブンがあるので便利です。コンビニで袋をもらったらAliExpressの袋みたいなサラサラしたやつがもらえてニコニコしていました。

二日目

ICPC本番 Day1です。この日は基本的に物資配布とPracticeです。

12時にバスが出るとのことで、11時にエントランスに集まろうということになりました。昼ご飯の時間が無さそうだったので、少しだけ早めに出て近くのコンビニでおにぎりを買っておきました。(バスの中で食べました)
おにぎりの具は全然わからなかったのですが、謎のそぼろっぽいやつがいろいろありました。

30分ほどバスに乗り、会場の亞洲大學に到着します。建物が巨大ですごい!

うおおおお pic.twitter.com/N3m7WEJtnX

— ZOI (@ZOI_dayo) November 15, 2025

まず受付です。名札とTシャツ、バッグが渡され、紙にパスポート番号を書かされます。名札には食事チケットやバスチケット、荷物タグなどが入っています。バスチケットはチーム全員の分が僕の名札に詰められていました。Tシャツには糸でラベルがついているのですが、ハサミも何も無いので切れません。しょうがないので紙の部分だけちぎりました。糸はふつうに綿の糸みたいな感じなので残ってても違和感はなかったです。
Tシャツは服の上から重ねて着ることになります。11月半ばでも台中はまあまあ暑いので、半袖で全然大丈夫そうです。

チームの撮影をして、近くにいた北大チームと喋りました。日本からは今年は北海道大学から2チーム、科学大から1チーム、専修大学から1チーム、会津大学から3チームでているようです。3チーム出ている大学があることからわかるように、今年はあまり枠が埋まらず延長を繰り返してピッタリのチーム数になったようです。

しばらく経ってから会場内に案内されます。

隣や前の席との間に全く壁がなくびっくりしつつ、机をセットアップします。当日必要なものはこの時点でここにおいておく必要があります。当日までにチェックされるらしいです。とはいえ、ライブラリと筆記用具とマスコットくらいしか置けないので簡単です。

奥からOxojo, ZOI, jupiter

机セットアップなどしている pic.twitter.com/jabGGmlRBq

— ZOI (@ZOI_dayo) November 15, 2025

開会式、およびPracticeが始まります。一部のアナウンスが中国語で行われておりよくわかりません... 一応重要な連絡は英語でも行われていそうです。

Practiceでは環境のチェックをします。まずDOMjudgeへのログインなのですが、ここでなぜか全員エラーで落ちます。少ししたら対応してくれました。

まずはBriefingです。コンテストの環境やルールについて詳しい説明があります。パソコンを見てみたところエディタとして事前情報にないVSCodeがインストールされていたのですが、拡張機能を入れないと使いにくいよね、ということでCLionを利用することにしました。

補完が出るか、簡単なコードのコンパイルが通るかどうか、WA / TLE / RE / CEなどの表示がどうなるかあたりを確かめた後、各自すこしタイピングをしてみたりClarを投げて遊んだりしました。デスクトップ環境がLinuxなので画面の左右分割のやり方が分かなかったのですが、まあ手作業で調整すればいいか、ということになりました。

最後にRunch Boxをもらってバスで帰宅になります。パンが4つ入っていました。帰ろうとしていたらちょうど会津大学の人と近くになったので喋りました。3チームもあるので人が多い!

パン

ホテルに戻ってご飯を食べました。近くのショッピングモールで中華料理を食べました。おいしかったけど高かったです... 普通の店だとたぶん日本より安いんですが、ショッピングモールは高そうですね...

帰って一瞬で寝ました。3分で就寝できる睡眠能力を発揮。

三日目

コンテスト当日です。朝からコンテストがあるので7時エントランス集合にしました。早い...
昨日もらったパンをいくつか食べてホテルを出ます。ICPC Tシャツと名札だけは忘れないようにします。

エナドリを買ってバスに乗り込みます。会場でゆったりとエナドリを飲み、まず荷物を預けます。
会場のドアの方をチラ見したところ風船が準備されていました。ついでに問題数が分かってしまいました。なるほど。(あとから知ったのですが、ここで簡単な問題の風船は多かったらしい...?です)

ここで最序盤の戦略を考えたりしていました。我々のチームは (特にZOIとjupiterが) 英語の正確な速読ができるか怪しかったのと、また分野が分かれば担当者がほぼ決定することから、Oxojoがテンプレートを写してくれている間にすべての問題の予想ジャンルだけをメモっておくことにしました。1問10~20秒くらいでざっと読んでいく感じです。また、Hemimorさんが「自明な簡単枠はサンプルが特徴的だったりする」みたいなことを言っていたので、そういう異常簡単枠を見つけられると良いねという話をしました。

トイレの場所を確認したりしていたところ、北大チームと会ったので喋りました。

入場が開始されたようなので移動します。うまく一列に並ぶことに成功しておらず、待ち列が根付き木をなしていました。列の分かれ目は大混乱です。

適当な末尾に並んでいたところ、上着を着たらだめだと指摘されました。Tシャツの内側に着るか、またはさっき預けた荷物に入れることができるようです。

会場に入場です。まずは手荷物検査があります。ポケットになにもないですか? と聞かれるのでポケットを裏返したりします。どうやらハンカチも持っていけないらしく、封筒に入れてコンテスト後返却になりました。

机の上は (ちょっと動かされた様子がありますが) 基本的に昨日セットアップした通りになっていて、キーボードの下に黄色い封筒が追加されています。DOMjudgeにはすでにログイン状態になっていました。

入場が遅れたのでコンテストは5分遅れで開始になりました。開始直後はすべてのチームが台湾扱いされていてびっくりしました (すぐに修正されました)

まず封筒を開けます。問題文は3部あると思っていたのですが1部しかなく驚きました。ホチキスを外し、バラバラにしながら読みます。Blank Paperももらいます。

まず、Aが解かれまくっているということでAをやります。読んでみたところsortしていい感じにするだけだったので、ZOI / jupiterが見守りつつOxojoがAを書きました。AC。(7 min)

このあたりで (Aに続き) EのFAがでます。Oxojoが読んでできますと言っているので任せます。AC。(16 min)

OxojoがEを読んでいる間になにか問題を探します。僕はグラフ周りが比較的得意な気がしたのでグラフとメモをしてある問題を探します。Mを開いて少し考えるとかなり簡単なので、これほんまか? でもちゃんと順位表で解かれているな、と確認しつつ実装をします。AC。(21 min)

jupiterはFを考えているようです。実装が終わったので概要を聞いてみたのですが、gcdとか言っていて明らかに苦手な香りがしています。説明を聞いているうちにjupiterが何かを理解したようなので丸投げします。AC。(29 min)

Oxojoは問題をいろいろ読んでくれていたっぽく、Bを説明してもらいます。ダイヤグラムを書き、平行四辺形的に座標変形をする (?) とすごく解けそうな香りがするので実装をします。WA。人の速さがyであるべきところを1と勘違いしていたことに気が付き、直します。WA。一箇所修正を忘れていました。AC。(103 min, 3 tries) ペナルティを出しすぎ...

OxojoがIでなにか詰まっているらしいので話を聞きます。「円の内部にあって中心を含まない凸包を考えた時、円の直径であってこの凸包と交わらないものはありますか?」だそうです。直感的にさすがにいけるやろ〜と言い実装を任せます。あとで「接しながら1周動く直線を考えた時かならず中心を横切る瞬間がある」で示せるな、などと思いました。

なんかWAらしいので見ます。コードを見ても変なことはしていなかったのでコーナーケースを疑い制約を見ます。nが小さいときにバグる事がわかったので後の修正は任せました。AC。(128 min, 2 tries)

さて、ここで残っているのはC, D, G, H, J, K, L, Nです。この時点で解かれているものに絞るとH, J, K, L, Nで、特にJ, K, Lはそれなりに解かれていそうです。
J, Lからは苦手な香りがするのでKを見ます。制約をよく読むと全探索すれば良いことがわかります。

まずは数式の構文解析です。イテレータの先頭にある連続した数字の列をデコードして返す関数を作り、それを用いてstring→llの解析を行います。オーバーフローしたりvalidな数式でないときは定数 err = -1 を返すことにしました。あとはsetで出現文字一覧を、mapでans -> index を行います。WA。なんとnとmを間違えている場所がありました。(あの...)

修正するとTLEになります。stringのコピーでO(len)かかるのですが、「何しても間に合うやろ!」と思っていたせいで忘れていました。 a+b*c のような形で保存して扱うことで修正すると、またWAです。一箇所だけllじゃなくintを使っているところがありました。どうして...??????

まだまだ続きます。次はTLEです。コードを読んでも計算量は壊れていなさそうです。クエリで尋ねられていたかどうかを管理していたset、またその結果を保存しているmapでlogがありそうなくらいです。あとは、106 で打ち切って良いところを 107 にしていたくらいでしょうか...?

コンテスト時間がもうほぼなかったので、とりあえず思いつく高速化をいろいろやってみます。まず打ち切りはちゃんと 106 にして、効果があるかわかりませんがQCFirm法を貼り、setとmapをunorderedにして、endlは\nにします。するとなぜかAC。(292min, 7 tries) なんだったんだろう。たぶんlogを定数だと思っているのが悪いです。

残りの時間はjupiterがNかなにかのコーナーケースを考えているのを見ていました。構築問題苦手すぎてよくわかりませんでした...

コンテスト終了です。凍結順位表を見る感じ、まあギリ30位に入れるかなあという雰囲気でした。Playoffは厳しい...

コンテスト終了後は片付けと移動になります。預けていた荷物を受け取り、講堂っぽいところに移動します。席は自由っぽかったですが、運よくHemimorさんを見つけたのでそこに座りました。

コンテストが9:30 ~ 14:30で、ちょっとした軽食を食べられるスペースはあるもののあんまり食べられなかったのでめちゃくちゃお腹が空いています。

問題解説、スポンサーの人が喋るコーナー、作問陣/ボランティアの人ありがとうコーナー、fastestおめでとうコーナー、問題Voteコーナーなどが続いたあと、待望のYesNoです。

我々のチームは凍結後は7 triesのKだけ通っています。これ通ってなかったらだいぶ椅子温め専門家になっていたのでなんとか間に合ってよかった。一回だけ上に飛んで 28th / 110 teamsでした。

めちゃくちゃ何も解けなかった、ということはないのですが、せっかく国外まで来たんだからもうちょっと取りたかったな〜という気持ちもあります。でもメダルがもらえたので嬉しい。

うお〜〜〜〜!!! pic.twitter.com/xTj9g8nIkW

— ZOI (@ZOI_dayo) November 16, 2025

その日もRunch Box (パン x 4) をもらってホテルに戻ります。北大のwinterさんが夜市回ろう〜と呼んでくれたので行きました。宮原眼科 (病院ではない) でアイスを食べたり、なんかでかい公園を見たり、北大のはとさんとjupiterと臭豆腐を食べたりしました。

観光などした pic.twitter.com/8kkVNOl7NA

— ZOI (@ZOI_dayo) November 16, 2025

その後はホテルに戻りました。大学放置して勝手に台湾旅行を組んでいただけなので、いくつかの教科の期末課題がやばいです。ちょっと触って4時くらいに寝ました。

四日目

7時半くらいに起きます。この日はICPC運営が国外チーム対象に観光ツアーを組んでくれていると聞いていたので、向かいます。

楽しげなガイドさんがいろいろ教えてくれました。月曜だったのでほとんどの施設は空いていなかったのですが、日本酒の醸造所の跡地 (?) 、宮原眼科、不思議な形の映画館、めちゃくちゃカラフルな公園などいろいろ見ることが出来ました。宮原眼科は2回目だったのですが、この日はアイスは食べずお土産を買ってみました。台湾っぽいお土産あるかな〜と探し、茶葉とかパイナップルケーキとかを買いました。

お茶買った pic.twitter.com/0xQbpayIdG

— ZOI (@ZOI_dayo) November 17, 2025

夕方くらいに終わったので一旦ホテルに戻り、ちょっと周りを散歩してみました。タピオカミルクティーを飲んでないなと思ったので近場で購入。これまあまあ量がある上にめちゃくちゃ甘いんですが、道行く人のそれなりの割合がカップを持っていてびっくりしました。シロップの量とかオーダーできそうなので減らしているのか、それとも全員甘党なのか気になります。

まあ自明に、うま pic.twitter.com/zMoObWJGrQ

— ZOI (@ZOI_dayo) November 17, 2025

近場になぜかららぽーとがあるということで、夜はそこに行きました。(探し方が悪いのかもですが) 台湾には思ったより台湾っぽいお店がなく、特にららぽーとだと本当に日本で見たことあるお店ばかりです。せっかくなら中華料理っぽいとこがいいよねと探してみたところ、まともな値段でやっていそうなところが1つくらいしか無かったのでそこに行きました。真珠みたいな名前の店だったはずですが、二日目の夜に行ったところより少し安いくらいでめっちゃ美味しかったのでよかったです。

ホテルに戻って課題をして、3時くらいに寝ました。

五日目

台北→桃園に戻り、帰国です。台湾ビールを飲んでないことに気がついたので台中→台北で飲んでました。

そういえば飲んでなかったので pic.twitter.com/OERJ7kITjB

— ZOI (@ZOI_dayo) November 18, 2025

完走した感想

初のRegional、しかも初の海外大会だったので色々新鮮でした。コンテストはまあ良くも悪くもなくという成績でしたが、メダルももらえたし、Tシャツとかバッグとかももらえて良かったです。

台湾、日本から近いし甘いもの多いし日本と文化が近いし、とても過ごしやすかったので好きになりました。海外なのでそれなりにお金はかかってしまうんですけどまたいつか行きたいです...!

明日は @SAH123 くんの記事が出るらしいです。楽しみ〜

zoi_dayo icon
この記事を書いた人
zoi_dayo

24B 競プロやWebをちょびっとやったりしていた

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2025年10月31日
【工大祭】traPalette 開催します!
zoi_dayo icon zoi_dayo
2025年7月9日
25年度春ハッカソン12班 「Witchcraft: Gem-beats」
zoi_dayo icon zoi_dayo
2025年7月7日
ICPC2025 国内予選 参加記 (Tsukuyom1:zoi_dayo視点)
zoi_dayo icon zoi_dayo
2025年3月13日
traPを吸い尽くせ! (traP活用法紹介)
zoi_dayo icon zoi_dayo
2025年3月7日
新歓特設ページを公開しました!【新歓ブログリレー1日目】
Luke256 icon Luke256
2024年12月24日
パソカタ人間のデバイス紹介
zoi_dayo icon zoi_dayo
記事一覧 タグ一覧 Google アナリティクスについて 特定商取引法に基づく表記