JOIの予選でエラーが出たときに思い出すべきいくつかのこと
対象読者:次のJOIが初めての競技プログラミングだよー、という人
私が競技プログラミングを始めたのはJOIがきっかけです。(PCKは他に出るメンバーがいなかったので)
普通のプログラミングは、時間にとらわれず自由に書いていたので、時間制限があると、よくあるコンパイルエラーにも焦って時間をロスしたりしたものでした。(結果は予選落ちでしたが)
そういうわけで、私が競技プログラミングを始めた頃によく起こっていたエラーの数々と見なおすべきところをまとめてみました。
関数が見つからないって言われてコンパイルエラーになるんだけど!
- A. "using namespace std;" ちゃんと書きました?
- B. "memset()" は
or ですよ? - C. まさかとは思いますが、ちゃんと #include 書いてますよね?
入力関係でバグってるっぽいんだけど!
- A. ここに載ってることを頭に入れましょう。
- B. char[] の大きさを、最長の長さ+1にするの忘れてないですよね?
私にはトラウマとなりつつあるので、100文字必要なときは、 char s[110] くらい確保していることもあります。
"floating point exception"っていうのが出た!
っ "0除算"
"segmentation fault"って何!?
- A. 大きめの配列を関数内(スタック領域)で宣言すると、発生することがあります。
参考になるのはこのあたりでしょうか。
(プログラミングコンテストプチテクニック(g++))
- B. 配列の範囲外参照
0-indexedと1-indexedの勘違いによることもしばしば。
valgrindというメモリデバッガーが非常に役に立ちますが、導入が大変かもしれないですね。
(valgrind を使ってみた)
余談:なんでみんなコンテスト開催の情報知ってるの?
私はここのカレンダーを、Googleカレンダーにインポートしています。
http://topcoder.g.hatena.ne.jp/
あとがき
時期的にはコレに参加すべきだったかもしれないけど、後の祭りというやつですね。
競技プログラミング関連のAdvent Calendar