チェックリスト
- 入力は全て正しいか、雰囲気だけでなく確認しよう
- ある程度のまとまりを書いたらコードを読み直して正しいか確認しよう
- コンパイルして実行する前にもう一度コードを見直そう
- サンプルと全て完全に一致しているかどうか確認しよう
- 適切な場所にデバッグをかけよう
- 解答コードの提出の前にデバッグは全てとれているか確認しよう
- 最小値は非負整数か?負の場合の値も考えるなら最小値は -INF で初期化ではないか?
- 考えるべき条件は甘くないか?逆に条件を絞りすぎてはいないか?
- 使うアルゴリズムに確信は持てるか?もっと簡単に解けないか?
- 変数名が重複していないか?
- ループ変数名は重複していないか?
- 入力の n, m, k は、極力の大文字のN, M, Kにしよう
- 入力の形式は正しいか?テストケース数が書かれるのみか、0で終るか、EOFで終るか、しっかりチェックしよう
- 出力形式は正しいか?テストケースの間や最後の行に改行は必要か?
- 出力する文字列は完全にサンプルや問題文の記述と一致しているか?(Yes, No or YES, NO / OK, ok / NG, ng / NA, -1, NG / サンプル出力にない文字列) サンプル出力をコピーして確認しよう
- 変数をグローバルに移行したとき初期化は問題ないか?
- コンテナ(vector, map, set など)の初期化やサイズ調整
- コードが分かりにくくなりそうなときは簡単な判定もbool関数化しよう
- 配列の要素数は適切か?0-originか1-originかチェックせよ
- オーダー計算は xx以上になるからダメ、oo以内だから間に合うなどとして、曖昧にせず正しく見積もれるようにすること
- 問題文
- 与えられた変数を全て使っているか?
- 与えられた変数を別の意味と解釈していないか?
- 入力の高さと幅が逆ではないか?
- 入力で指定される事項は漏れ無くチェックしよう
- 問題概要がわからないときは、制約や目的を文章から抜粋抽出したり、サンプルを図示したりしよう。
- オーバーフロー
- INFの値は 1<<28 は小さいので危険、1<<29 < (int)1e9 でどちらもintにもてるが、(int)1e9 同士を足す場合はオーバーフローすることがある
- STL
- 文字列はソートできる
- substrはO(n)以上
- next_permutation で全ての場合を求めるときは、もとの要素が増加列で順序付けされている必要がある
- map
なら配列でやろう