ICPC 2025 Yokohama Regional Contest 参加記
この記事は農工大 Advent Calendar 2025の10日目の記事です。
農工大 - Qiita Advent Calendar 2025 - Qiita
Calendar page for Qiita Advent Calendar 2025 regarding 農工大.
qiita.com

昨日のサーバー修復に続いて、今日はICPC 2025 Yokohama Regional Contestに参加した際の記録を書きます(記憶の薄れないうちに記録を残しておきたい)。
時系列順に書いていこうと思います。
国内予選
はじめに国内予選について簡単に書いておきます。ICPC2025の国内予選は2025/07/04に行われました。
チームについて
弊学ではMCCから11チームが参加していて、基本的にはABCのレーティングを基にチーム決めが行われました。
ということで、私、toufu24、mr63tnegi、コーチ: hokki (敬称略) のチームが出来上がりました。
チーム名はKATUNIです。チームメンバーの名前の最初の文字と最後の文字を組み合わせて作りました。
AtCoderの色的には緑水緑で、農工大の中では2番手チームです。
国内予選の結果
問題の内容は詳しく書きませんが、結果は6完で66位でした。
私はD問題を解いていましたが、条件分岐のミスに気付くのが遅れてペナルティを出しまくって何とかACしました。
他のチームメンバーがE, Fを解いてくれていたので、最終的には6完で66位です。かなり健闘したと思います。
(なお、ペナルティを出しまくったので6完の中で最弱。ICPCのペナルティはデカい。)

結果として農工大の中では1位となったので、横浜行きが決定します (割とぎりぎりの通過)。
Regional Contestの準備
Regional Contestは横浜で行われました (だいぶ昔からそうらしい)。日程は2025/12/06にリハーサル、2025/12/07に本番です。
宿の予約
横浜に行くことが決まって最初にしたこと、それは宿の予約です。
家が遠い人はICPC側から宿泊費の補助(このときは7500円)がでますが、全額ではありません。
宿をとるのは早ければ早いほど安いので、早めにとって損はないかと思います。
2025/07/08には正式に通過が決まったので、2025/07/09にはホテルを予約しています。
今回予約したのはアパホテル&リゾート〈横浜ベイタワー〉です。
普通のアパホテルではなくリゾートなので、通常よりもいい感じの見た目をしています。
ただし、いい部屋を取るわけにもいかないので、普通の部屋を借りました。
練習をしてみる
ICPCのRegional Contestが国内予選と違うのは以下の2点でしょうか。
- 問題が英語
- キーボードが英字配列
英語は難しいです。1単語読み落として問題の解釈を間違える可能性があるので十分に注意したいところ。
また、キーボードも英字配列を使う必要があるのですが、普段日本語配列を使っていると記号の位置がわからないです。あとEnterが小さいのが嫌です。
さて、練習ですが、あまり時間が取れなかったので集まって練習できたのは2回だけでした。
とりあえず5時間使って過去問を解きました。2024年と2023年の問題を解きましたが、それぞれ4完と2完でまぁ…といった感じ。
あとは個人個人でABCに参加するなど最低限の準備をしました。
Regional Contest 1日目 (リハーサル)
昼食
そんなこんなで2025/12/06、リハーサルの日を迎えました。
ICPC Regional Contestの会場は横浜産貿ホールです。スケジュールはこんな感じ。

会場の最寄り駅である日本大通り駅に12:00に集合してお昼ご飯を食べることにしました。
特に食べる場所は決めておらず、歩きながら決めればいいかなと思っていましたが意外と店がない(特にファミレス)。
結局、すぐ近くにあるジョナサンに入りました(マップ)。
ジョナサンに来るのは久しぶりな気がします。私はビビンバを食べました。おいしかった。

オープニング & リハーサル
会場に入ってオープニングとリハーサルです。

リハーサルでは本番と同じ環境でプログラムを書いて提出するところまでやりました。
リハーサル用の問題が4問あったのですが、リハーサルということもあって気が緩んでいたからか、1問、全員が完全に誤解したまま問題を解いていました(しかも結局解けなかった)。
逆に本番ではちゃんと問題を読もうという意識が生まれたのでこれはこれでよかったのかもしれません。
開発環境にはプログラムなどをプリントするためのコマンドが用意されていて、かなり便利でした。
リハーサルのあとはスポンサー企業の社員の方のお話を聞き、各チームが一言ずつ自己紹介をしました。
ホテルに行く
リハーサルが終わり、一旦アパホテルにチェックインして荷物を置きました。
部屋は12階でしたが、この建物が30階以上あるので21階までは低層階扱いでした(エレベーターが分けられている)。
一応外側の部屋なので窓はありますが、ビルが見えるかなといった感じ。
(朝とった写真なので布団がぐちゃってる)

夜ごはん
さて、ここからが1日目のメインイベントです。
横浜といえば中華街でしょう。

とりあえず中華街に来ました。が、中華街ってどう回るのが正解なんでしょうか。
全く分からなかったので、みんなで2周くらいしてみたのですがよくわからず。
この区域にあるお店は大体が次の3つに分けられるかなと思います。
- 食べ歩き前提で食べ物を売っているお店
- ちゃんとした中華料理屋
- 食べ放題や飲み放題がある中華料理屋
このうち、2は高すぎて厳しく、3は逆に安すぎる(?)という理由で食べ歩きすることに決まりました。
とはいえ何を食べるのかというのも難しいもので、食べたのは叉焼メロンパン、大籠包、炸鶏排(ザージーパイ)です。
一応写真をば。


炸鶏排のようなものはいろんなお店で売っているのですが、ここで買えば少なくともハズレはなさそう。近くに本店があるらしい。
結構大きいですが、これで580円だったのでかなりお得かと思います。
ということで夜ごはんパートが終了しました。ちゃんとした中華料理屋にもいつか行きたいところです。
Regional Contest 2日目 (本番)
朝
2日目のスケジュールはこうなっています。8:30~9:00に受付、9:00からコンテスト開始で少し忙しい感じがあります。

7:30に起床して、コンビニで朝ご飯を買って食べました。
本当はアパ社長カレーを食べたかったのですが、席数が少ないのもあって並んでいたので断念。
荷物をまとめて 8:20 くらいに宿を出ました。
コンテスト本番
入り口で手続きを済ませて荷物を置いたら、ようやくコンテスト本番です。
問題数はAからLまでの12問、前年までとは異なり、A問題とB問題が簡単というわけではなくなりました。あまり難しい問題を解けない我々は、最初に簡単な問題を探す必要があります。
コンテスト開始直後
初動の役割分担は次の通り、
- toufu24: ライブラリを書く
- 私: 前半から問題をみて簡単そうな問題を見つける
- mr63tnegi: 後半から問題をみて簡単そうな問題を見つける
D問題
初めに目を付けたのはD問題でした。問題の概要としては次のような感じです。
Nが与えられるので N = 〇+□ (〇, □ > 0) の形に分解し、文字列としてそれらを結合した際の最大値を求める。
ぱっと思いついたのは、Nを半分にした際の桁数分の1, 10, 100, …を引いて後ろにくっつけるというものでした。
例えば、8が入力ならその半分は4なので同じ長さの1を後ろにつけて71が答えです。
一旦この方針でよさそうとなったので、toufu24に実装を任せて自分とmr63tnegiは他の問題をもう少しじっくり見ることにしました。
実装自体は早く終わって、サンプルも通ったので提出しましたがWA、一旦実装を私に代わってtoufu24とバグ探しをしたものの、もう2回WAを出してしまいました。
若干詰まってしまったため、私はいったん全探索する貪欲を書いて確認することにし、その間にtoufu24はmr63tnegiと他の問題を見ることに。
D問題の貪欲な手法を実装し終わって比較したところ、入力11でさっそく違う答えが出ました。本来は1+10で110が正解ですが、先ほどの解法は10+1で101を出力してしまっていました。
これを確認して問題をもう一回見返すと、末尾が10のべき乗になっていることがは明白でした。そのため、末尾に10のべき乗をくっつける全探索で解けるのではと思案して実装を始めました。
入力が10^17まであったため、解答はlong longに収まらない可能性があります。そのため、Pythonを使って実装し、ようやくAC。
ここまでで0:40+3ペナついているのでかなりもったいないですが、問題を多く解けばいいと思考を切り替えて次の問題に進みます。
E問題
次に実装が行われたのはE問題でした。E問題の概要は以下の通りです。
a×b×cの豆腐があるので、それを少なくともk個に分割できる立方体の辺の最大値を分数で求める
私がD問題を実装している間に検討が行われ、分割する長さの二分探索でいけそうとのことでしたが、分数で答える必要があるのがネックです。
全体を10^7倍して考えることで整数の二分探索にできるということで実装が行われましたが、うまくいかず1, 2ペナ出てしまいます。
ここで、この問題では最終的な答えは豆腐のいずれかの辺をすべて使い切るという性質があることに着目し、辺の長さではなくその辺を何個に分割するかを二分探索すればよいと思いつきました。
これを基に、分数を扱うためにPythonで実装しなおし、1ペナは出したものの無事にACできました。
ここまでで2:18+6ペナ。少しペースを上げたいところ。
H問題
何とか2問ACし、全員で検討を重ねて順位表も鑑みた結果、次に解けそうだと考えられたのはH問題。概要を説明するのが難しいですが、大まかには以下の通り。
N×Mの池に1辺がkでコの字に並べられたパネルを複数個置こうとしている#にパネルが置かれているとし、.に何も置かれていないとしたとき、このような配置は可能か
かなりの重実装にはなりますが、端からコの字になっているパネル部分を取り除いていけばよさそうです。
すべて探索していると計算量が不安なため、各点に対して、右と下それぞれについてk個パネルがに伸びているか保持しながら処理していきました。
mr63tnegiが実装し、試行錯誤しながら3ペナでH問題を突破。この時点で4:19+9ペナ、順位表が凍結されていて残り1時間もありません。
J問題
これもグリッドの問題で解けそうな感じだったため、全員で考えていました。問題の概要は以下のとおり。
I,C,P,?でできたグリッドが与えられ、?には任意の文字を置ける- 任意の2×2においてICPCが含まれれるようにできるか
パターンがあるというところまでは行きつきましたが、それ以上の良案は思いつかず。
他にもC問題やI問題を見ていましたが、いずれも解法は思いつかず…。
結果発表
ということで、3完でコンテストは終了しました。コンテストは1階で行われていたのですが、クロージングは9階で行われました。
順位は63チーム中56位、国内予選の結果から考えると妥当といった感じですが、もう1問解きたかったという思いもあります。

クロージングの後には立食形式でご飯を食べつつ、スポンサー企業を回っていました。
競プロ界隈で知ってる人がほとんどおらず、自分から話しかける勇気もないのでチームメンバーと話すくらいでした…。
振り返り
よかったこと
- 初めは誤った解法を考えたD問題で軌道修正してACできた
- E問題の軌道修正をできた
- 適宜チーム全体の状況を確認しながらやるべきことを考えることができた
反省点
- D問題は解法の正当性の評価が足りなかった(もう少し考えれば間違っていることに気づけた可能性が高い)
まとめ
初めてのICPC Regional Contestでしたが、有意義な時間を過ごせたと思います。
まだまだ精進が足りないので、まずはAtCoderで水色になるところから目指していきたいです。
