ICPCに向けたUECodersの戦略

このエントリは,Competitive Programming Advent Calendar Div2012の参加記事です.

ICPCアジア地区予選について色々とまとめておこうと思っていたのですが,折角の機会なのでこの場を借りて記事にしてしまいます.

チーム情報

チーム名

Ultimate & Escapist Coders
先に略称をUECodersに決めて'U'と'E'から始まる単語をでっち上げたのは秘密.

チームメンバ
  • k_operafan([twitter:@k_operafan])

言わずもがなチーム最強のコーダーです.コーディング速度に優れていて,アジア地区予選ではCでFAをもらっていました.

k_operafanさんがスカウト.問題の読解や解法のアタリをつけるスピードが素晴らしいです.

私.全体的にゆっくり.デフォルトで紙コーディングをする事が多いので,(良い意味で)k_operafanさんと対極的.

練習

国内予選まで

チームを結成して間もない頃は,試行錯誤的に練習をしていました.Codeforcesでやったこともありました.が,最終的には過去の国内予選を解く事がメインになっていきました.

アジア地区予選まで

およそ週1回集まって,地区予選の問題を解いていました.AOJのVirtual AreaがICPC Live Archiveに対応してからは,5時間セットを忠実に再現出来るようになりました.そのため,練習が終わってからは,実際の地区予選のStandingsと私たちの結果や解説を見てわいわいしてました.
練習セットには台湾やタイ,韓国などのアジア圏のものを多く使いました.たまに気分転換(?)にヨーロッパ辺りのセットも採用したことがありました.

この練習会を通して↓の戦略がある程度固まってきました.

戦略(アジア地区予選に沿って)

アジア地区予選での全体の流れは[id:todo314:20121121:1353495586]を参照下さい.

出だし

開始と同時に3人でA,B,Cをそれぞれ読み始めます.基本的には,A=iz, B=todo, C=k_operafanな担当です.解法を思い浮かんだ人からコーディングを開始します.その間他の人は,今読んでいる問題を考えるか,以降の問題を読み進めるか,です.
これは「最初はあまりPCを空けたくない」という理由から来ています.実際,アジア地区予選では,(問題が大体難易度順に並んでいたので,)この戦略が完璧にマッチして,30分ちょいでA,B,Cを通す事が出来ています.

コーディング体制
  • 単独(A,B,C,D,F)

出だしは,上の通り大体単独です.また,その後は,k_operafanさんが中難易度くらいのな問題を解いている間に,todoとizさんで問題を(基本交互に)読み進めていきます.

  • k_operafan + iz(E,G)

結構実装が重い問題は,このスタイルをとる事があります.その間,todoは紙コーディングをしている事が多いです.ややこしい問題は特に予めtodoが紙コーディングをしておいて,PCが空いたら即代わってコードを一気に書く事があります(国内予選Cとか).

  • k_operafan + todo(I)

I問題は,todoが大体解法を考えていたけれど,細かい条件等が未定だったので,このスタイルになりました(あまり無い).この間izさんはHの解法を考えていました.

ミニミーティング

大体1時間毎に一旦作業を打ち切って,全員でミーティング(のようなもの)を行います.
主に

  1. 問題の説明
  2. 解法の相談
  3. 今後の方針

について話し合います.これによって,誰が何をやっている/これから何をやる,どの問題が解けそう/難しそう,とかの情報を共有できます.

問題一覧表

コンテスト中は,誰がどの問題を読んだか分からなくなることが多いし,一々聞くのもコーディングしている人の気が散ってしまうので,そういう情報を記録する表を作る事にしています.

↓の画像は,アジア地区予選で用いたものです(k_operafanさんThanks!).

画像にも書いてありますが,◎は「その人がその問題を読んだ」,○は「その人はその問題を誰かから聞いた」という事を意味しています.これは,練習の時に,ある問題を読んだのが一人(=私)だけで,しかも誤読していた,という事があったからです.また線が引かれているのはその問題はACしたという事です.
さらに,問題ごとに簡単なジャンル・解法やコーディング時間見積を書く事もあります.

まとめ

意外と短くまとまってしまいましたが,結局のところ,チームで練習を行って試行錯誤的に改善していくことでチーム特有の戦略を作っていくのがいいのだなあと思いました.

明日はlizanさんです!