ICPCを引退して今までを振り返ってみた

2016-02-20 Sat 18:37:22 JST
posted by hadrori

このエントリーは本当にただ振り返って,事実をだらだらと書いているだけなので飽きたらそっと閉じることをおすすめします.結論とかないです.最後の方完全に飽きてます.

きっかけ

競技プログラミングを始めるきっかけはICPC 2012のアジア地区予選のホストを東工大がやったことでした.学内にポスターがちらほら貼ってあって「へぇ,ICPCってのがあるんだ」みたいな話をしてました.ちなみにですが,この時点ですでにFCCPCは存在しています.していたとおもいます.
その後,B3に上がる春休みにponyoと勉強を始めました.

最初にやったこと

まず始めた頃もしくはその直前にやったことを順に列挙します.

  • Introduction to Algorithms
    競技プログラマーはこれぐらいは全てマスターしていると思って,問題とか解きはじめる前にこれを全部読みました.
  • プログラミングコンテストチャレンジブック
    なんか有名らしいのでとりあえず一通り読みました.この頃もまだまともに問題を解いていない.
  • AOJ
    ついに問題を解き始めました.ICPCにでるつもりだったのでICPCの過去問を適当に開いて解いてました.3問解ければいいなみたいな気持ちでした.C++歴10秒とかなので他人のコード見てvectorとかいう超絶便利なものに感動したりしました.

チーム決める

AOJを解き始めた頃からponyoと問題を漁って2人で解くということを講義が終わった後とかにやってました.

さて,この頃から問題になるのはICPCは3人チームということです.適当に同期に声をかけまくってみるも全然のってくれませんでしたが,あるとき学内のICPC練習会にも出たことがあるらしいという人が見つかったので一緒にやることにしました.チームでの練習方法は相変わらず,問題セットを用意して解くのではなく毎回適当に選んだ問題をみんなで考えるという方法でした.

残念なことにこの時一緒にやることになった彼はあまり乗り気ではないみたいで,だんだんチーム練習とかに顔を出さなくなってしまったので流石にヤバイと思い始めました.なにせ3人いないと参加すらできないわけですから.

そこで急遽他の3人目を探すことにしました.しかしもうあてはありません.しょうがないのでTwitterという便利なツールがあったので適当に募集してみたら一瞬で見つかりました.stqnの加入です.Twitter最強.拡散してくれた方々ありがとうございました.

AOJでアカウントみつけてsolved数が少なかったので「大丈夫か?こいつ」とponyoと話していましたが,大丈夫どころではなかったです.

以降3年間このチームでICPCに参加し続けることになります.

チーム練習

まともな経験者がチームに入ってきたことでいろいろ変わりました.まずチーム練習はセットを解くようになり,問題文もちゃんと印刷しました.
練習場所は情報工学科の計算機室をつかいました.学科外のメンバーもいましたが,計算機室の人にお願いしたら使わせてもらえました.なんでも頼んでみるものです.
この頃僕とponyoはJIS配列を,stqnがUS配列を使っていて,練習の時はJIS配列に合わせてもらっていました.
セットを解いた後は解けなかった問題をググってみたり,解いた問題のコードを他のチームメイトがみたりしてました.たぶん人々がやっていることと大して変わらないと思います.
僕はチーム練習の後,他のメンバーが解いた問題も自分で解くようにしてました.

模擬国内予選2013

さて,模擬国内です.初めてのコンテストです.結果はA, Cの2完.いまでも覚えてるけどBはクソ読みにくい.
一応順位的には国内予選を抜けられるラインだったけれど,まああまり良い結果ではなかったので厳しい気持です.
だからといって特に練習内容を見なおしたりすることはなく,漠然と練習を続けます.

国内予選2013

この頃になると,4完は出来なきゃまずいよねというかんじになってました.
本番では4完で13位でした.国内予選突破です.
後半はほとんど座ってるだけでしたね.前半は調子がいい.

アジア地区予選に向けての練習

特に何かが変わることもなく,AOJをちびちびやっていきます.
正直に言うと,このころの記憶全然無いです.
会津大会ではJIS配列を使えず,変なキーボードを使わされるということがわかっていたので,その変なキーボードを(stqnが)買ってそれでチーム練習をしてました.買った時から打鍵感がキモくて,少し強く押さないと反応してくれません.

どうやらアジア地区予選は2箇所参加できるらしいので,前の年にhaskell-loverがスロットをとった台湾行っちゃおうぜということで台湾に行くことにしました.

模擬地区予選2013

グーグルでやるらしいので参加した.記憶が無い.終わった後にサイゼリヤに行って#define int long long教の布教活動が行われていたのは覚えている.

アジア地区予選 会津大会 2013

http://fccpc.hateblo.jp/entry/2013/12/01/015729

チームメイトはホテルから会津大まで徒歩で行くと言っていて本気か???って感じだった.僕はバスで行きました.
本番の内容はまあ悪くはなかったのですが,binding.pryがいたのでスロットは取れなかった.その上,会津でbinding.pryに負けたので台湾でスロットをとっても譲ることになってしまった.厳しい〜〜〜〜〜〜
今standingsを見返したらメダル枠と中国抜いたら東工大1位だったのね…本当に闇討ちしておくべきだった.

アジア地区予選 嘉義大会 2013

http://fccpc.hateblo.jp/entry/2013/12/01/015617

さて参加する意味がなく,他のチームのスロットの妨害しかやることがない台湾ですが,真面目にやります.
今となっては恒例の前半爆速,後半座るだけをやりました.終わってからあと2問は解けた感じだったので後半2時間半の時間の使い方間違えたかなあとかなり反省していた.
驚くべきことにですね,ここでスロットを取れたんですよね.意味ないけど.
本当に申し訳ないのは,僕らがいなかったら会津がスロットを取れていたことなんですよね.今年ついにスロットをとってくれて本当によかったです.
観光とかする間もなく帰国.これが本当にもったいなかったので翌年からは観光しまくるようになります.唯一の思い出が爆速で飛ばすタクシーで殺されるかと思ったことですね.

次の国内予選まで

時間がいっぱいあります.僕はPKUにあるUSACOを埋めることにしました.
USACOはいい問題がいっぱいあるのですが,PKUがクソでしたね.別にPKUでやらなくても良かった.変な癖がつく.
codeforcesとかtopcoderとかいろいろな問題に手を出したけど,最終的にAOJが一番やりやすかった.というかね,練習するなら1つのジャッジでやることにこだわったほうがいいと思う.じゃないといつまでも簡単な問題に逃げられるから.

チーム戦略を考える

この辺りで大きく変わったことがあって,チームの運用をいろいろ考えました.台湾での反省が大きいですね.
まず進行表を作るようにしました.問題が解けそうなのか,実装は辛そうか,題意,解法のメモを残します.あと誰が題意を把握しているかも.
これは練習でも毎回作るようにしてました.情報の共有のスピードが上がりました.
次に指示役を1人立てることにしました.指示役はコーダーをやりません.これはバグらせがちな僕がやることにしました.
時間の把握,他のチームの状況の把握,解法の共有,コーダーの交代指示,次やる問題の指示,デバグあたりをやっていました.
開始時の問題読解は例えば12問だったらABCD, EFGH, IJKLと3つに分けて3人で読みました.3で割ったあまり分は早く読み終わった人が読みます.全部読むことが大事.特に海外サイトでは.

模擬国内予選2014

模擬国内の前日から"トレンドマイクロプログラミングコンテスト2014"があったんですよね.
http://fccpc.hateblo.jp/archive/category/TMPC
あれはAtCoderに日和らない企業コンテストで本当に好感が持てますよね.クソだったけど.またやらないかなあ.
ちょうどそのコンテストの休憩3時間に模擬国内があって,どたばた.

国内予選2014

http://fccpc.hateblo.jp/entry/2014/07/12/015127

まあ流石に前回2人が競プロ歴3ヶ月でも通ったので通過できるでしょという感じでした.
5完までで70分ぐらい.あとは座るだけ.

アジア地区予選 東京大会 2014

http://fccpc.hateblo.jp/entry/2014/10/21/015142

どこの大学も強くてすごかった.3枠目でうまく入れないかなあと思ったけど,ダメでした.

アジア地区予選 バンコク大会 2014

http://fccpc.hateblo.jp/entry/2014/11/16/025552

トレンドマイクロプログラミングコンテストでやった問題が出ましたね.制約は現実的だった.ローカルで2時間回して埋め込みましたが.
観光しまくって楽しかった.

最後の国内予選まで

もうチームの動きは最適化されていて,序盤のちょっと考えればできるゾーンは本当に速くなった.あとは個々が頑張るしか無いよなあという感じでした.
それでも得られるものは毎回あるのでチーム練習はよかったです.

僕はひたすらAOJを埋めることにしました.3ヶ月で400問ぐらい埋めた気がする.
ponyoはSPOJを埋めていたらしい.

模擬国内予選2015

http://fccpc.hateblo.jp/entry/2015/06/14/221251
成長したなあ

国内予選2015

http://fccpc.hateblo.jp/entry/2015/06/27/010912
もう面倒になってきた

アジア地区予選 プーケット大会 2015

ここに決めたのは,WFで使われるから強いチームは避けるだろうとおもったからですね.あと前回のタイ旅行がよかったので,今度はプーケットに行こうという感じ.
参加記結局書いてないなあ.

アジア地区予選 筑波大会 2015

3回目のアジア地区予選にもなると流石にもう新鮮味はなくてただのオフ会.
宿が良くなかったですね.つくば研修センター.
シャワーの温度が30度ぐらいだったらしくて,水かな?ってぐらい寒かった.体温が奪われる.

振り返ってみて

つらい.WF行きたかった.
チームのライブラリを公開しておきます
https://github.com/hadrori/FCCPC_Library