d3sxpにいた頃、意識していたこと

さて、Competitive Programming Advent Calendarの順番がやってまいりました。
何を書こうかなー、と思ったのですが、タイトルは見ての通りになりました。
これから話すことは、僕のいたチーム、d3sxpがICPCで闘う上で僕(と多分チームが)が意識していたことです。

・WAを出さないために
基本的に、WAを好きなチームはありません。
しかし、うちのチームは特に2つの意味で、WAを嫌っていました。
まず、WAを出すとテンションが下がって、全く問題が解けなくなってしまうこと。
そして、アジア予選の戦略としてのWA回避です。
2つ目は何を言っているのかと思われるかもしれませんが、重要なことで、
日本のアジア予選において、東大の直下の日本チームの解答問題数は団子で1問差程度でほぼ同問になります。
なので、世界大会を狙おうとするなら、タイムで勝つ必要があります。(現在は海外勢も混じってそんなに甘くありません。)
逆に言うと、落ち着いて、WAを回避していれば、多少各問が解く時間が遅くても、勝てると信じていました。
問題数で追い付けさえすれば、確実にタイムで上回るという状況を作りたかったのです。
WAを出さないため注意することは只一つ、チェック体制です。
うちのチーム、コーディングに入る時、必ず他の人の同意を得ます(アルゴリズム等)。
極力、1人でコーディングさせることはありませんでした。
1問に1人でアタックすることもほぼありません。
解答を投げる前には、コーダー含め2人以上の同意がなくては、投げてはいけない事になっていました。
1人でコードを書いた場合、必ず、投げる前に詳細な口頭説明を行います。
この過程が結構重要で、話しているうちに、適当に書いていた部分があらわになって
バグが大量に取れたりします。お勧めです。

・問題を解くために
問題を解くためには幾つか注意していた点があります。
1つ目は「問題を見逃さない事」です。
問題数で追い付くことを意識していたので、簡単な問題を見逃すことは避けねばなりません。
なので、うちのチームは、中盤、全ての問題を読むことを徹底していました。
それからもうひとつ重要な点があって、問題を共有し、難易度について、多人数で検討することです。
誰かにとって難しい問題が、誰かに取って簡単なことは良くあります。
また、問題難易度に対して意見が共有出来ていると、解答作成進行時に
変なコンフリクトが起きずにスムーズに行きます。
2つ目は「バグを共有すること」です。
実際問題、全ての問題をバグ無し、というわけにはいきません。
なので、いつかバグは出てしまいます。その時、極力2人以上で取り組みます。
少なくとも、1人しか知らないバグがあるという状況はつくらず、問題を共有します。
解答は正しいと思って投げるのですから、WAが出た時点で、後はトライ&エラーしかありません。
バグが取れるかどうかは、それこそ、5時間という短い時間では、運だと思います。
なので、極力多人数でアタックして、その運を少しでも上げるべきです。
3つ目は「落ち着くこと」です。
これが、チームメンバーが意識していたことで最も重要な事だったと、今になって思います。
皆さん、問題解いているときに落ち着いているでしょうか。
怒っていたり、過度に集中していると、逆に問題が解けなくなることは良くあります。
怒っていたりすると、落ち着けよ、と言えばいいのですが
過度の集中はなかなか厄介です。視野が狭くなるくせに、本人はなかなか気付きませんし、
静かにしているので、周りもそれに気付きにくいのです。
コーディングやバグ取りの時によく陥ってしまいますね。
なので、僕は、時々、意識的にコーダーに話しかけることを行っていました。
「どう?」とか「おちついてやってるー?」とかそんな軽い感じです。
集中してるんだから邪魔してやんなと思うかもしれませんが、
変にドツボにはまってPC占有されるよりはよっぽどましで、
それで「話しかけんな」とか「話しかけられたら頭こんがらがるやん」
とかなったら、逆にそれは冷静でなく、良くない証拠です。そんなことで問題は解けません。
「うんー大丈夫ー」という返事を出来るくらいが丁度よいのです。
問題を解いている間、こういう風にちょっと交流を持ってみるのはいいことだと思います。
試合中の良いリフレッシュになりますし。適度な集中を保つこともできます。
落ち着かなくてはいけない状況は他にもあります。
問題数で負けている時、アルゴリズムがわからない時等々…
しかし、僕は(多分チームも)、WAの時に語った通り
最終的にどうせ団子になるのだから、落ち着いていけば大丈夫大丈夫
と高をくくってやっていました。
落ち着く方法は他にもあります。タイムキーピングをして、適度な区切りを設けることです。
うちのチームでも、「○○したいけどいい?」「じゃあ△分以内ね」
みたいに、時間を区切ってテキパキやろうとすると、適度な集中が出来てよかったです。

以上が、チームにいた時に意識していたことです。
これを読んだ皆さんに参考になればよいのですが…

余談ですが、Competitive Programming Advent Calendarの企画で
僕のチームメイトの人が、記事を書きます。14日だったかな?
実は内容が似通っていて、彼はd3で取った戦略等を書くそうです。
というか、俺も彼が戦略的に何考えてたのか良く知らないので
(あまりじっくり話し合ったことも…ない…気がする)
楽しみでもあるし恐怖でもある……
考えてたこと全く違ったらどうしようwwww
内容を見比べてみると、面白いのではないでしょうか。
僕も、見比べて楽しもうと思います。