どうも、Namazuです。
ICPC国内予選に参加してきました(^_-)-☆
我々のチーム構成は以下の通りです。
チーム名:Sobaya(Team ID:102)
- Namazu
- Souring
- gotoh
sobaya007が居ないのはご愛敬ということで。
ちなみに、使用言語はC++です。
結果は119位、8問中3問(A,B,C)正解という内容でした。
まず、ICPCとは?
ACM-ICPC とは、ACM (Association for Computing Machinery) という計算機学会が主催する、International Collegiate Programming Contest (国際大学対抗プログラミングコンテスト) という名前のプログラミングコンテストです。同じ大学で3人一組のチームを作り、チームでプログラミングと問題解決の能力を競う大会です。全世界で毎年3万人以上が参加する大会に成長しています。
ACM-ICPC の世界大会では、各国で開かれる地区大会を勝ち抜いたチームが、大学を代表して腕を競います。世界大会には、一つの大学から一つのチームしか参加できません。そのため、大学対抗プログラミングコンテストと位置づけられています。
(公式ページより引用)
要するに、世界規模の競技プログラミングコンテストですね。
AtCoderで開催されるプログラミングコンテストとは異なり、チームで問題に取り組む形になっています。
関連サイト等
大会公式ページ: http://icpc.iisf.or.jp/2016-tsukuba/domestic/?lang=ja
国内予選問題一覧: http://icpcsec.storage.googleapis.com/icpc2016-domestic/problems/all_ja.html
国内予選大会結果: http://icpc.tanaka.ecc.u-tokyo.ac.jp/icpc2016/common/guest_standings_ja.php
国内予選の振り返り
今回のけい
N:Namazu
S:Souring
G:gotoh
まず、大会始まったタイミングでひとこと。
S「とりあえず3完目指そう」
ということで、
A→Namazu
B→Souring
C→gotoh
という分担で取り掛かり始めました。
A問題はすぐに解法が分かったので、Namazuが書いて無事通過。
B,Cはまだ考え中だったため、とりあえずDを見ることに。
D→Namazu
B→Souring
C→gotoh
しかし、これがなかなかどうして解法が分からない。
すると、
S「やばいセグフォ(error : Segmentation Fault 11)出たけど意味わからん」
ということで一旦Dを放棄してBを解くことに集中。
さらに、
G「C行けるかも」
ということでPCをgotohに託し、Bのコードを印刷して紙デバッグをすることに。
B→Souring,Namazu
C→gotoh
Bも改善方法が良く分からず、Cも実装に難航して暫くこの状態が継続。
Bでgoto文を削除したあたりから突破口が見えてきて、サンプルの確認を経て提出すると無事通過。これで二問目。
G「多分C出来たけどクッソ重い」
とのことでC問題見てみると…
N「これエラトステネスの鰤じゃない?」
と思いつくが、焦っていたのもあってgotohの既に書いたコードとその方針が分からない…
ということで思い切って書きなおすことに。
その間、Souringとgotohは休憩を挟みつつDを考え始める。
C→Namazu
D→Souring,gotoh
実装で何度も止まりつつ、なんとかCも通過した。三問目。
この時点で既に残り30分。E以降を放棄してDに集中することに。
実はgotohが既にある程度書き終えていて、サンプルで試してみるがどうも合わない。
残り10分切ったあたりからはもう再帰関数の返り値を変えては試しを繰り返し、結局間に合わず終了。
結局Dは結構良い線まで行ったので惜しかった。
今回学んだこと
さて、今回の参加から学んだことをまとめると以下のようになります。
- ICPCの問題ごとのレベルや問題傾向を事前に把握しておくべきだった
- 始めに問題をある程度読んだ後、それぞれが出来そうな問題に取り掛かったほうが良かった
- NEW GAMEはいいぞ
特に役割分担に関しては、今回なら
C→Namazu
D→gotoh
にしたほうが良かったですね。(結果論、後出しジャンケンとも考えられなくはないが)
チームで競技プログラミングに参加するのは初めてでしたが、個々の能力だけでなく"チーム"だからこその立ち回りも必要なことが良く分かりました。
来年こそはアジア大会出たいですね。(ってそばやが言ってた)