質問編集履歴

7

変更

2021/06/15 00:43

投稿

kay_ventris4
kay_ventris4

スコア269

test CHANGED
File without changes
test CHANGED
@@ -22,6 +22,8 @@
22
22
 
23
23
  ```Python
24
24
 
25
+ from itertools import accumulate
26
+
25
27
  from bisect import bisect_left
26
28
 
27
29
 
@@ -32,13 +34,13 @@
32
34
 
33
35
 
34
36
 
35
- check = [0] + A
37
+ check = [0] + [a for a in A]
36
38
 
37
- li = [i for i in range(len(check) - 1)]
39
+ li = [0] + list(accumulate([1 for _ in range(len(check) - 1)]))
38
40
 
39
- #check = [0, 3, 5, 6, 7]
41
+ #[0, 3, 5, 6, 7]
40
42
 
41
- #li = [0, 1, 2, 3, 4]
43
+ #[0, 1, 2, 3, 4]
42
44
 
43
45
 
44
46
 
@@ -46,7 +48,7 @@
46
48
 
47
49
  left = 1
48
50
 
49
- right = 10 ** 18
51
+ right = 10 ** 19
50
52
 
51
53
  while right - left > 1:
52
54
 
@@ -62,8 +64,6 @@
62
64
 
63
65
  return left
64
66
 
65
-
66
-
67
67
  for _ in range(Q):
68
68
 
69
69
  K = int(input())

6

追加

2021/06/15 00:43

投稿

kay_ventris4
kay_ventris4

スコア269

test CHANGED
@@ -1 +1 @@
1
- 二分探索で例外が処理しきれない
1
+ AtCoder / 二分探索で例外が処理しきれない
test CHANGED
File without changes

5

変更

2021/06/14 13:52

投稿

kay_ventris4
kay_ventris4

スコア269

test CHANGED
File without changes
test CHANGED
@@ -76,4 +76,4 @@
76
76
 
77
77
  #考えたこと・質問
78
78
 
79
- 何か見えない例外が発生し、本当の答えが実はleftではなくrightなのではないか?と言うことを考え、leftが条件式left - li[bisect_left(check, left) - 1] == kを満たさない場合はrightを代わりに出力するようにしても、やはり該当のテストケース2つでWAをくらったため、leftにもrightにも正解がないようなケースが発生していることがわかりました。どのような見落としが考えられますでしょうか。自分で思いつくケースは色々と模索したものの一向に答えにたどり着く兆しが見えません。お力添え頂ける箇所がございましたら、ご教授のほど何卒よろしくお願い申し上げます。
79
+ 何か見えない例外が発生し、本当の答えが実はleftではなくrightなのではないか?と言うことを考え、leftが条件式left - li[bisect_left(check, left) - 1] == kを満たさない場合はrightを代わりに出力するようにしても、やはり該当のテストケース2つでWAをくらったため、leftにもrightにも正解がないようなケースが発生していることがわかりました。どのような見落としが考えられるのでしょうか。自分で思いつくケースは色々と模索したものの一向に答えにたどり着く兆しが見えません。お力添え頂ける箇所がございましたら、ご教授のほど何卒よろしくお願い申し上げます。

4

変更

2021/06/14 12:29

投稿

kay_ventris4
kay_ventris4

スコア269

test CHANGED
File without changes
test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  #方針
16
16
 
17
- checkとliの1つのリストは、各Kの入力に対してそれに対応する今回の問題の答えが「check[i]より大きい時(iはそのような条件を満たす最小の値)、その答えの値からli[i]を引いたものがKである」と言う風に考え設定しました。例えば、「入力例1」で言うとK2にあたる5について言えば、それに対応する9が「check[4] = 7より大きい時、その答えの値からli[4] = 4を引いたもの(=5)がKである」といった要領です。この方針ではAC×21, WA×2でほとんどのテストケースには正解しているのですが、ごく一部のケースで間違いであるようです。昨日行われたばかりのコンテストであるため、テストケース自体は未だ公開されておりません。
17
+ checkとliの1つのリストは、各Kの入力に対してそれに対応する今回の問題の答えが「check[i]より大きい時(iはそのような条件を満たす最小の値)、その答えの値からli[i]を引いたものがKである」と言う風に考え設定しました。例えば、「入力例1」で言うとK2にあたる5について言えば、それに対応する答えの9が「check[4] = 7より大きい時、その答えの値からli[4] = 4を引いたもの(=5)がKである」といった要領です。この方針ではAC×21, WA×2でほとんどのテストケースには正解しているのですが、ごく一部のケースで間違いであるようです。昨日行われたばかりのコンテストであるため、テストケース自体は未だ公開されておりません。
18
18
 
19
19
 
20
20
 

3

変更

2021/06/14 12:28

投稿

kay_ventris4
kay_ventris4

スコア269

test CHANGED
@@ -1 +1 @@
1
- 二分探索の処理で例外が発生てしまう
1
+ 二分探索で例外が処理きれない
test CHANGED
File without changes

2

変更

2021/06/14 12:27

投稿

kay_ventris4
kay_ventris4

スコア269

test CHANGED
File without changes
test CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
 
34
34
 
35
- check = [0] + [a for a in A]
35
+ check = [0] + A
36
36
 
37
37
  li = [i for i in range(len(check) - 1)]
38
38
 

1

追加

2021/06/14 12:27

投稿

kay_ventris4
kay_ventris4

スコア269

test CHANGED
File without changes
test CHANGED
@@ -36,6 +36,10 @@
36
36
 
37
37
  li = [i for i in range(len(check) - 1)]
38
38
 
39
+ #check = [0, 3, 5, 6, 7]
40
+
41
+ #li = [0, 1, 2, 3, 4]
42
+
39
43
 
40
44
 
41
45
  def find_ind(k):