回答編集履歴
1
すこしゴタクを追加
answer
CHANGED
@@ -5,7 +5,8 @@
|
|
5
5
|
1000000000000000000
|
6
6
|
```
|
7
7
|
期待する答えは `1000000000000000002`になるはずですが、実行結果は `999999999999999999` になります。
|
8
|
-
これは
|
8
|
+
これは意地悪な境界値ケースで発生します。テストケースにkillerとついていますが、おそらく「二分木探索での実装者を殺しに来る」意味合いなのかなと思います。問題文のミスリードを利用した引っ掛け問題です。
|
9
|
+
|
9
10
|
A,Nともに取りうる値は10^18までですが、数列Aの最大数が10^6あるため、答えとなりうる値が最大で10^10+10^6あることになります。このプログラムでは答えとして取りうる値の最大値をright側に入れて開始していますが、最大値が実際に取りうる最大値に足りていないので答えとして10^18以上の数値が来た場合にこれ以上の数が探索できずにleftにひたすらmidが加算されていきます。最終的にright未満の数値である10^18-1までしかleftが増加しません。
|
10
11
|
|
11
12
|
なので、対策としてはrightの初期値をもう少し増やしてあげれば良い、ということになります。最低10^18 + 10^6 + 1 あれば大丈夫だと思いますが、それより大きい値でも2倍程度なら処理速度に大差ありません。10^18*2くらいで開始すれば問題なくACが取れると思います。
|