teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

すこしゴタクを追加

2021/06/14 21:49

投稿

hope_mucci
hope_mucci

スコア4447

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が取れると思います。