ICPC2026 国内予選参加記
はじめに
私です。
7月3日に開催されたICPC国内予選に、チーム WaSanBon (Twil3akine、Caffeineholic、Akagi_Shrine) で参加しました。
関連リンク
- 順位表
- 問題一覧
結論から言うと、A、Bの2完でした。チームメイトを侮辱する気は一切ありません(むしろ感謝で胸いっぱいです)が、個人的には本当に恥です。
情けなくて、開いた口がどこにも行きません。「あのとき、こうしておけば」というタラレバ話を1日中できると思います。
私は全体の相談役と、C、Eの考察を担当しました。
実装が得意なら自分が全部実装したかったんですけどね…本当に悔しいです。
A問題「最強のカードを見つけろ」
配られたカードのうち、大富豪で一番強いカードを出力する問題です。
カードの数字を として、強さの比較に使う値 を次のように定めました。
が最大になるカードを選び、元の数字に戻して出力します。実装では、最大値が 以上なら を引き、そうでなければそのまま出力しました。
コンテスト後に「 または が含まれていれば強いほうを出し、どちらもなければ最大値を出す」という解法を聞いて、賢いなぁ…と感じました。
B問題「自動販売機」
自動販売機を置くと、設置位置から距離 以内にある扉をカバーできます。すべての扉をカバーするために必要な自動販売機の最小台数を求める問題です。
最初は「必ず各扉の間に自動販売機がなければならない」と誤読しており、若干のタイムロスをしてしまいました。
扉の位置を昇順に とします。まだカバーされていない最も左の扉を とすると、自動販売機を に置くことで、右端 までカバーできます。
したがって、次の貪欲法で求められます。
- 、答えを とする。
- を左端として、自動販売機を に置く。
- を満たす扉をすべて飛ばす。
- 答えに を加え、未処理の扉があれば手順2に戻る。
誤読に気付いたあとは、すぐに正しい方針へ進めたのでよかったです。
C問題「残った水」
持ち前の語弱をここで遺憾なく発揮してしまい、問題文を読んでも全然分かりませんでした。頭をひねって考えた結果、「何か凸性が関係ありそうだなぁ」というところで思考をロックしてしまいました。
終了後にほかのチームの子から話を聞くと、「上から見て、壁にぶつかるまで各マスの水をなくす」という処理を左右から1回ずつ行うだけでよかったらしく、本当に悲しくなりました。
これは完全に私の考察ミスです。チームのみんなに申し訳ないです。
難しすぎて、今年の重実装枠はCに来たのかと思いました。実態は私の考察ミスです。
D問題「回数数列」
私はこの問題にほとんど関与していませんが、考察はほぼ合っていたようです。C問題の考察をスムーズに終えられていたら、これも解けていたのではないかと思います…。
内容に触れると、群数列のような構造になっていて、 と の大小関係によって場合分けが生じるようです。
E問題「買い物上手」
考えていると、どうしても貪欲法でよいように思えてきます。
瓶全体の集合を 、ジェム付きの瓶の集合を とします。ジェムが付いていない瓶の集合は、補集合 です。また、ジェム付きの瓶の最小コストを とします。
コンテスト中は、次のように場合分けして考えました。
- の場合:ジェム付きの瓶を1本買えば、すべての瓶を買えるため、コストは 。
- の場合:ジェムを利用できないため、すべての瓶のコストの総和。
- それ以外の場合:ジェムで買える本数を確保するための と、コインで買う瓶のコストの総和。
「それ以外」のケースをもう少し詰めていれば正解できたそうで、ここに時間を割けなかったことが本当に悔いになっています。
F問題「地図アプリの高速化」
BFSをすればよいのでは、と思ったのですが、 の正方形グリッドなので撤退しました。
何か絶対に賢い方法があるんだろうなぁ、と思うんですけどね…。
さいごに
G問題以降は、問題を見ることすらできていません。
いつの間にか、次はICPCに参加できる最後の年になってしまいました。
来年はもうM1です。来年は横浜に行きたいです。この1年は真面目に頑張ろうと思います。
ちゃんとチーム練習とかね…。
というか、ICPCはいつRustを使えるようにしてくれるんですかね…。