0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ACM-ICPC 国内予選 参加記(ICPC2023~ICPC2025)

Posted at

まえがき

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時間の競技プログラミング対策を行っていました.内容は以下の通りです.

  1. 各対策の日はまずウォーミングアップとして,Paizaの問題を1つ解きました.その後過去問に取り組み,私とGは各年のB問題を,Sは慣れるまでA問題を解いていました.
  2. 参考書を用いた,基本的なアルゴリズムとデータ構造の勉強を行っていました.

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_JAG
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月

時間制限がある中で解ける問題を取捨選択し,素早く正確に多くの問題を解く力をつけるため,週のノルマとして以下のような取り組みを行っていました.

  1. ほぼ毎週土曜日に開催されているAtCoder Beginners Contest(以下ABC)に参加
  2. 直近でリアルタイム参加したABCで解けなかった問題を1つ選び,ACとなるソースコードを自力で作り上げる(解説は見てもよいし,相談も可)
  3. ABCの過去問(ABC042~)に取り組む.この頃のABCは全4題しかなく,レベルは現在のものと比べると低く,解きやすいため,出題されている全ての問題に取り組む(ACとなるコードを作成する)
  4. その他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_JAG
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
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回になりました.取り組む問題は年度が近いものと,残しておいた初見問題を選定しました.

  1. 2023年模擬:3完(A'+A+B)_オフライン
  2. 2014年模擬:4完(A'+A+B+C)+40分余り_オンライン
  3. 2015年模擬:4完(A'+A+B+C)_オンライン
  4. 2016年模擬:3完(A'+A+B)_オンライン
  5. 2025年模擬:4完(A+B+C+E)_オフライン
  6. 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_JAG
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
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運営の方々に感謝申し上げます.

私はこれからも時間の許す限り,競プロを続けていこうと思います.
目指せ水色コーダー!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?