【AtCoder】初心者あるある
AtCoderは問題を解くスピードも大事ですが、自前の環境で正解を確かめずにそのまま提出すると案外間違えます. 簡単な問題でもローカルで確認することが大事です.
この記事では私が実際に間違えた問題や、頻出の引っ掛けなどについて随時更新していきます。
オーバーフローに気を付ける.
- intで十分ですか?109を超える変数はlong longで宣言しよう.ただし,109より小さくても計算過程で桁落ち(オーバーフロー)する可能性があります.
int i = 100000; long long l = i*i; cout << "l =" << l;
l = 1410065408 // 10000000000ではなくintの上限値が出力されてしまう
- たまに問題文に「109+7(=mod)で割った余りを求めなさい」と書いてあるのは,答えが非常に大きい値となってオーバーフローする可能性があるからです.計算過程でmodで割ることを意識しよう.
一度変数に入れるか入れないかで出力形式が変化する.
int ans = pow(10, 6); cout << ans;
期待している出力はもちろん"100000"ですが・・・
cout << pow(10, 6);
こう書いてしまうと、"1e+06"と出力されてしまうので不正解扱いになってしまいます. 環境によると思いますが,怖い時は一度変数に入れてしまう方が良いかもしれません.