まえがき
2025年7月5日にICPC国内予選が開催されました.
私は過去2回,チーム"EDAMAMEN"として参加しており,今年のICPC2025が3回目の参加で,ラストイヤーでした.今後ICPCに参加する人たちの参考となるよう,今年のICPC2025を中心に3年間の参加記を書いていきたいと思います.
目次
ICPC 2023
初参加のICPCです.学部2回生の夏頃にこのコンテストと"競技プログラミング"の存在を知り,競プロにハマっていきました.
チームビルディング
ICPCは3人で参加するコンテストであるため,まずチーム作りをする必要があります.
当時私が通う大学にはプログラミングに中心的に取り組むサークルがなかったため,情報系に興味がある,親しい友人を誘いました.大体以下のような誘い文句で勧誘していました.
- チームで取り組んだ経験を積める(就活で話すネタに)
- コーディングの機会を増やせる
自分たちの所属学科では情報系だけでなく,電気・電子系も学びます.そのため情報を専門的に学ぶ学科と比べてコーディングの機会が少ないのもあり,誘いに乗ってくれました.
ここで,軽くメンバーの紹介をしたいと思います.
- G:めっちゃバイトして稼いでいる大学の同期.要領が良いタイプ
- S:サークルでバンド活動をめっちゃ頑張っている,大学の同期
またICPCでは3人のチームメンバーとは別に,不正がないかチェックする監督員とコーチ(監督員とコーチは兼任可)を用意する必要があり,これらは大学の教員か院生が担う必要があります.そのため私は,2年後期に履修していた授業の担当教員に,講義終わりに依頼しにいきました.「教授は研究活動で忙しいから,断られるかもな~」と思っていましたが,あっさり了承してくれました.教員は基本研究や論文執筆で忙しいので,監督員等を依頼する場合は早めの行動をお勧めします.自分はコンテストの半年以上前に依頼しにいきましたが,最低でも3か月前には依頼しに行くと良いと思います.
戦略
1問1問,チームメンバー3人で取り組んでいく方針でした.コーディング担当やその補助役,テストケース作成担当はメンバー間で交代していき,考察やコード提出前最終チェックは全員で行っていました.この年は3完を目指していて,A, B, C問題をそれぞれS, G, 私が担当する方針でした.
精進・対策記録
2022年9月~2023年2月
大学の課題等で忙しかったため,1-2週間で1~3問のペースで過去問を解き,メンバー同士のコードで相違点,反省点を話し合っていました.この際,会津大学のオンラインジャッジを利用していました.過去問以外にも,制限時間内に正確なコードを書く練習をするため,Paiza のB, A, S問題に取り組んでいました.
取り組んだ過去問は模擬のものも含めて,2004年~2006年度のA~C問題が中心でした.
2023年2月~2023年4月
3人の内,2人以上の都合があった日に4~6時間の競技プログラミング対策を行っていました.内容は以下の通りです.
- 各対策の日はまずウォーミングアップとして,Paizaの問題を1つ解きました.その後過去問に取り組み,私とGは各年のB問題を,Sは慣れるまでA問題を解いていました.
- 参考書を用いた,基本的なアルゴリズムとデータ構造の勉強を行っていました.
2023年4月~2023年7月
本番当日まで,以下のことを行っていました.
- 個人練習:1週間に1年分の過去問(古めの,2007年度から2013年度辺り)のA~C問題の内,1~3つを解いていました.
- 最低でもチームメンバーそれぞれが担当する問題までは解いていました(C問題の担当なら,A~C問題のACをノルマに)
- チーム練習:本番環境と同様の条件下で,近年(2017年~2022年度)の過去問演習を行っていました.
- 授業がない日の朝9:00~12:00 の3時間,大学の空きスペースに集合し,対面で演習を行っていました.
結果
模擬国内予選 (JAG)
A問題のみの1完で,88/92 位でした.B問題は方針こそあっていたものの,正解することができず,悔しかったのを覚えています.
国内予選
初参加のICPC.結果はA, B問題の2完で,134/291 位でした.C以降の問題では良い方針を思いつけず,悔しかったです.
![]() |
| ICPC2023 国内予選結果 |
| URL_https://icpc.jp/2023/domestic/results/ |
| 参照_2025-7-23 |
ICPC 2024
2回目のICPCです.
ICPC2023以降,私とGはAtCoderを用いた演習を本格的に行うようになりました.
去年と比べメンバーに変更がありましたが,その時より良い結果を残すことができました.
チームビルディング
メンバーの一人であったSは就職活動のため,今年の出場は難しく,新たなメンバーを1人探す必要がありました.新しいメンバーは,研究室に配属された際に知り合ったNに依頼しました.NはAtCoderユーザー(当時茶色コーダー)で,元々競プロに興味があったのもあり,快く引き受けてくれました.
戦略
去年の戦略では,計算機は1台しか使えないという制約に上手く対処できていませんでした.というのも,1問1問チーム全員で取り組んでしまっており,手持ち無沙汰になってしまうメンバーが出ていたのです.
そこで今年は,各問題に手分けして取り組む方針に変更しました.
具体的には,以下のようになります.
- 各問題の方針(解くアルゴリズム)は,その時に空いているメンバー全員で考える
- 1つの問題につき,コーディング担当は1人
- あるメンバーが1つの計算機を用いてコーディングを行っている時,他メンバーは他の問題の考察を行う
- コード提出前は,チーム全員でコードレビューを行う
- アルゴリズムを考えたメンバーが中心となって行う
精進・対策記録
2023年9月~2024年4月
時間制限がある中で解ける問題を取捨選択し,素早く正確に多くの問題を解く力をつけるため,週のノルマとして以下のような取り組みを行っていました.
- ほぼ毎週土曜日に開催されているAtCoder Beginners Contest(以下ABC)に参加
- 直近でリアルタイム参加したABCで解けなかった問題を1つ選び,ACとなるソースコードを自力で作り上げる(解説は見てもよいし,相談も可)
- ABCの過去問(ABC042~)に取り組む.この頃のABCは全4題しかなく,レベルは現在のものと比べると低く,解きやすいため,出題されている全ての問題に取り組む(ACとなるコードを作成する)
- その他Paizaや参考書の問題を解く
この期間において,1. はABC322~ABC339,2. はABC043~ABC060に取り組むことができました.また,1週のノルマとは別に以下のノルマを作成していました.
- 国内予選および模擬国内予選の過去問に取り組む.この時,任意の4問をACとなるまで取り組むこと
このノルマは2005年~2008年の4年分(本選・模擬)まで取り組むことができました.
2024年4月~本番まで
ひたすら過去問演習を行っていました.
個人では,2005年~2016年までの古めの過去問を,チーム練習では近年の2017年~2023年の過去問に取り組みました.
結果
模擬国内予選 (JAG)
NがA問題,GがB問題を解いて,2完でした.
去年より1問多く回答できたものの,幾何学だったC問題を正解できず,順位は 105/167 位でした.
![]() |
| ICPC2024 模擬国内予選結果 |
| URL_https://jag-icpc.org/?2024%2FPractice%2F%E6%A8%A1%E6%93%AC%E5%9B%BD%E5%86%85%E4%BA%88%E9%81%B8%2F%E9%A0%86%E4%BD%8D |
| 参照_2025-7-23 |
国内予選
今年から例年のA問題レベルの問題が1問増えていました.
NがA問題,私がC問題,GがB, D問題を解き,4完でした.去年より多くの問題を解くことができ,成長を実感して嬉しかったのを覚えています.
順位は,125/354 位 でした.
![]() |
| ICPC2024 国内予選結果 |
| URL_https://storage.googleapis.com/files.icpc.jp/domestic2024/standings.html |
| 参照_2025-7-23 |
ICPC 2025
最後のICPCです.私とGは,AtCoderでの最高レーティングは緑色を達成しており,競プロに関して自信がついてきた頃です.チーム名は過去2年と同じ,"EDAMAMEN"で出場しました.
チームビルディング
今年は去年と同じメンバーでの出場.
戦略
基本去年と同じ戦略ですが,私がチームで最もレーティングが高かったこともあり,私→N→G→私...,の順で解くことに変更.
精進・対策記録
2024年9月~2025年6月
ひたすらABCに出て,実力を伸ばしていました.学部卒業までは卒論に追われ,院進後は就活やTA (Teaching Assistant)の業務があったりと忙しく,チーム練習はできませんでした.
2025年6月~本番まで
基本週1ペースで練習.結果的にはオフライン(対面)での練習2回とオンラインでの練習4回になりました.取り組む問題は年度が近いものと,残しておいた初見問題を選定しました.
- 2023年模擬:3完(A'+A+B)_オフライン
- 2014年模擬:4完(A'+A+B+C)+40分余り_オンライン
- 2015年模擬:4完(A'+A+B+C)_オンライン
- 2016年模擬:3完(A'+A+B)_オンライン
- 2025年模擬:4完(A+B+C+E)_オフライン
- 2024年本戦:4完(A+B+C+D)_オンライン
去年から易しめの問題が1問追加されていたこともあり,対応する年の本戦もしくは模擬のA問題を追加して取り組みました.
メンバーは全員修士1回生で,授業とTA (Teaching Assistant), 研究や就活で忙しい中,都合を合わせてくれたメンバーには感謝しています.
模擬国内予選 (JAG)
自分はA,E問題を担当し,GはC問題,NはB問題を担当しました.
A, B, C問題まではスムーズに解くことができました.D問題では,ICPCでは恐らく初のインタラクティブ形式の問題が出現し,戸惑いつつも貪欲法が得意なGに考察を任せていました.その間に私とNはE問題に取り組んでいました.
近年あまり見ない構文解析の問題が出ましたが,考察により問題の二分木の構造の性質を見抜くことができ,また私自身が最近"再帰下降構文解析"を勉強していたため,無事ACすることができました.
結果
A, B, C, Eの4完で,順位は 93/167 位でした.
![]() |
| ICPC2025 模擬国内予選結果 |
| URL_https://jag-icpc.org/?2025%2FPractice%2F%E6%A8%A1%E6%93%AC%E5%9B%BD%E5%86%85%E4%BA%88%E9%81%B8%2F%E9%A0%86%E4%BD%8D |
| 参照_2025-7-23 |
国内予選
当日(本番開始前)
ゼミ終了後,競技を行う教室に集合.15時頃には3人とも到着してました.
競技環境は去年と同じ,教授の居室を使わせていただきました.プリンタは初期化されていたため,プリンタドライバを入れなおし,IPアドレス等設定して準備.無事印刷できることを確認後,ノートパソコンのディスプレイを隠す用の紙を作ってました(プロジェクターにディスプレイを映し,メンバー全員が画面を見れるようにするため).
競技開始30分後までの流れ(A,B,C問題のAC)
競技開始と同時に,私はすべての問題文を2部印刷する操作をして,そのままA問題に取り組みました.その間,他のメンバー2人はプリンタ前で待機し,印刷された問題文の回収&B問題の考察をしていました.A問題の考察を下記に示します.
A問題は制約が緩く,$ n $の値は小さい上にオーバーフローの危険性もなかったため愚直に全探索で実装.
A問題を3分ほどでAC後,Nに計算機を渡しました.この時,NはB問題の実装に少し不安があったようで,自分もGからの問題の説明を受けつつ,B問題の考察に加わりました.
考察の結果,方針は以下のように決定.
B問題は入力される$ s $を2つ用意して,それぞれ$ s_1 $, $ s_2 $とし,横に並べたものを考える.$ s_2 $の先頭文字を$ s_1 $の2文字目に合わせたものを初期配置とし,s2を順次スライドさせる.$ s_1 $と$ s_2 $の重なっている範囲の文字列が完全に一致した時,$ s_1 $+(重なる部分を除いた$ s_2 $)が解となる.
GにNのフォローを任せ,自分はC問題の考察を始めました.
B問題は開始17分後にAC.私はGにC問題の問題設定と下記の方針を話しました.
平日の日数を求め,元々平日だが休日となった日数を引く.
この時,計算しやすいように期間[1,m]ではなく,期間[0,m-1]で平日の日数を数え上げる(日にちは全て-1しておく).
平日の日数は以下の式で求められます.
5*\lfloor m/7\rfloor+\text{min}(5,m\text{%}7)
ただ私は最初の日を0日目として数え上げる設定に引っ張られ,$ \text{min}(5,m\text{%}7) $の所を$ \text{min}(5,m\text{%}7+1) $という間違った考察をしてしまっていましたが,Gがそのミスに気づき,ミスることなく無事開始29分後にAC.
E問題ACまで
GがC問題の実装を開始した時から,私とNはD問題の考察をしていましたが,苦戦していました.Gが考察に加わった後も良い方針が思いつかず,時間がかかりそうだったので,NにD問題の考察を任せ,私とGはE問題の考察へ.
方針は下記のもので決定し,私はE問題の実装を開始しました.
制限時間の余裕がない順に,星を順次訪問していけばよい
しかし時間が押していたため,アルゴリズムをきちんと検討せずに実装を開始してしまい,星への到達時間を十分考慮しない実装をしてしまいました....
私はアルゴリズムを検討し直すため,一旦計算機を離れることに.
私がE問題の実装をしている間,GとNの考察によりD問題の方針が決まったようで,Gに計算機を渡し,D問題の実装を任せました.
E問題の考察では特にワープの処理が面倒で,迷っていました.しかし星の数と愚直解の計算量を考慮した結果,実行時間的に余裕があることが分かり,下記の方針に決定しました.
訪問済みの星群から未訪問の星それぞれに到達するまでに,制限時間の最も余裕がない星の探索はBFSで行うことができ,計算量$\text{O}(n)$で可能.これを$n-1$回繰りかえすため,全体の最悪計算量は$ \text{O}(n^2) < 10^7 $となり高速.
$\rightarrow$訪問済みの星を始点とする多始点BFSを繰り返し,その時々で余裕のない星への訪問を行う貪欲法
D問題実装中のGから計算機を譲ってもらい,私はE問題の実装を開始しました.
結果,競技開始から約2時間後にE問題をACできました.
残り45分間の奮闘(D問題)
Gが途中だったD問題の実装を再開し,その間自分とNはF問題の問題理解を進めていました.
残り30分を切った頃,良い解法が思いつかなかったため,Gが取り組んでいるD問題にメンバー全員で取り組むことに.
残り3分を切ったタイミングでサンプルケースを合わせることはできたものの,ACすることができず,時間がきて競技終了に.
結果
A, B, C, Eの4完で,最終順位は 104/352 位でした。
![]() |
| ICPC2025 国内予選結果 |
| URL_https://icpcsec.firebaseapp.com/standings/ |
| 参照_2025-7-23 |
結果まとめ(&予選突破を狙うなら)
私たちのチームの,3年間の国内予選の成績を下の表に示します.
| 開催年度 | 順位 | 参加チーム数 | 上位割合 | 予選突破順位 | 予選突破の上位割合 |
|---|---|---|---|---|---|
| 2023 | 134 | 291 | 46% | 68 | 23% |
| 2024 | 125 | 354 | 35% | 85 | 24% |
| 2025 | 104 | 352 | 29% | 72 | 20% |
直近3年間の結果と近年の難化傾向により,予選突破のためには最低でも上位20%以上の成績を残す必要がありそうです.AtCoderのレーティング色に当てはめると,最低でも緑色~水色の実力が必要です.
私たちのチームは,年々順位は上昇していたものの,予選突破には届かず...
私個人の感覚ですが,予選突破を狙うためにはチーム練習より,個人の実力を伸ばす方が大事だと思います.チームの連携は短期対策で何とかなりますが,最終的にはメンバー1人1人の地力(考察力やアルゴリズムの知識など,問題を解く力)の方が重要で,こちらは長期での対策が必要です.そのため予選突破を狙うなら,競プロの経験がない人ほど,早めに過去問演習やAtCoderなどで地力を伸ばすことをお勧めします.
3年間を振り返って
ICPCに取り組んだ3年間を振り返って真っ先に出てくるのは,「参加して良かった」ということです.初参加時,私の大学は競プロ文化が根付いておらず,本学からICPCに参加したチームは私たちが初めてという状況でした.その中で情報収集やメンバー勧誘,チームリーダーとしての役割や演習問題の選定など,様々な経験をすることができ,自分の主体性や行動力を高めることができたと思います.
3年間,一度も予選突破できなかった悔しさは残りますが,それ以上に得るものがあったコンテストでした.私たちのチームは今年で引退ですが,予選突破の夢は後輩たちに託し,様々な支援をしていきたいと思います.
あとがき
お忙しい中,監督員を引き受けて下さった先生方に,誠に感謝申し上げます.
また,コンテストの開催にあたり,JAGの方含め,ICPC運営の方々に感謝申し上げます.
私はこれからも時間の許す限り,競プロを続けていこうと思います.
目指せ水色コーダー!




