ACM-ICPC

ICPC雑記


ちょっとしたコツや豆知識のようなものの紹介。

チームメイトとの役割分担をしっかりと。

コンテストは3人1チームです。なので、当然ですがチーム間の連係プレーが非常に重要です。
問題解読、アルゴリズム、コーディング・・・のように役割を分担する方法。
あるいは問題ごとに分担する方法。
分担の仕方はいろいろありあます。
事前に考えておくべきことはたくさんあるでしょう。


簡単な問題をしっかりと見極める。

特に最近の傾向として見られることですが、A〜Fまで簡単な順に並んでいるとは限りません。
とはいえ、A問題は例年一番簡単な問題なので、誰か1人がA問題を解いている間に他の2人が他の問題をざっと読んで解く順番を決めておくのもよいでしょう。

実は同じ時間で解いても、解く順番によってタイムに差が出てきたりします。
例えば、それぞれの問題を解くのに、
 A:10分
 B:30分
 C:50分
かかるとします。合計タイムは開始時から提出時までの時間の累積なので、
 ABCの順に解くと → 10 + (10+30) + (10+30+50) = 140
 ACBの順に解くと → 10 + (10+50) + (10+50+30) = 160
 CBAの順に解くと → 50 + (50+30) + (50+30+10) = 220
となります。
さすがにこれは極端な例ですが、1分1秒を争うこの大会では重要になってきます。
とにかく簡単な問題から、しかも最初の問題はできるだけ早く解くように心がけましょう。

時間を競うということをしっかり認識する。

たまに、コードの可読性、キレイさ、アルゴリズムの良さ、コードの安全性などなど、妙なところにやたらこだわる人がいますが、はっきりいって無駄です。(いや、無駄ですって言い切るのもどうかとは思いますが・・・)

このACM-ICPCというコンテストでは、コードの良さは一切評価されません。評価基準は、正解した問題数と合計時間だけ。合計時間の中には実行時間だけではなく、コーディング、テスト、提出などの時間も含まれていることを忘れてはいけません。さすがに、あまりにアルゴリズムが悪くて何時間とかかるようでは話になりません。が、数秒や数十秒で解けるような解法であれば十分です。

実行時間を30秒縮めるために、コーディング時間が10分長くなったとしたら、(このコンテストでは)それは間違いなのです。

とにかく練習する。

ウェブ上には、練習するための問題が大量に公開されています。少しでも良い成績をおさめたいと思ったら、とにかくたくさん練習をしてください。多すぎるということはありません。

練習をすることによって、プログラミングの技術やタイピングはもちろん、問題文の読み方や変数名・関数名の付け方、役割分担や難易度の見極めなどができるようになっていきます。

繰り返しますが、とにかく練習してください。「解き方がわかる」のと「解ける」のは全く違うのです。