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

回答編集履歴

4

edit

2018/01/12 13:12

投稿

mkgrei
mkgrei

スコア8562

answer CHANGED
@@ -28,7 +28,7 @@
28
28
  for p in a:
29
29
  if s[p[0], p[1]]:
30
30
  ans.append(p)
31
- s[max(0, p[0]-th+1):min(s.shape[0], p[0]+th), max(0, p[1]-th+1):min(s.shape[1], p[1]+th)] = False
31
+ s[max(0, p[0]-th+1):min(s.shape[0], p[0]+th-1), max(0, p[1]-th+1):min(s.shape[1], p[1]+th-1)] = False
32
32
  return np.array(ans)
33
33
  ans = f(a)
34
34
  ```

3

edit

2018/01/12 13:12

投稿

mkgrei
mkgrei

スコア8562

answer CHANGED
@@ -15,7 +15,7 @@
15
15
  メモリが無限にあると仮定して、O(N)。
16
16
  ```python
17
17
  import numpy as np
18
- N = 10*9
18
+ N = 10**9
19
19
  M = 10000
20
20
  th = 30
21
21
 

2

edit

2018/01/12 12:46

投稿

mkgrei
mkgrei

スコア8562

answer CHANGED
@@ -8,4 +8,27 @@
8
8
  ---
9
9
 
10
10
  て、1個目の値でソートするだけでnlognですやん。
11
- また無駄なことをしてしまいました。
11
+ また無駄なことをしてしまいました。
12
+
13
+ ---
14
+
15
+ メモリが無限にあると仮定して、O(N)。
16
+ ```python
17
+ import numpy as np
18
+ N = 10*9
19
+ M = 10000
20
+ th = 30
21
+
22
+ a = np.random.randint(M, size=(N,2))
23
+ def f(a):
24
+ mm = np.max(a, axis=0)+1
25
+ s = np.empty((mm[0], mm[1]), dtype=bool)
26
+ s.fill(1)
27
+ ans = []
28
+ for p in a:
29
+ if s[p[0], p[1]]:
30
+ ans.append(p)
31
+ s[max(0, p[0]-th+1):min(s.shape[0], p[0]+th), max(0, p[1]-th+1):min(s.shape[1], p[1]+th)] = False
32
+ return np.array(ans)
33
+ ans = f(a)
34
+ ```

1

edit

2018/01/12 12:38

投稿

mkgrei
mkgrei

スコア8562

answer CHANGED
@@ -3,4 +3,9 @@
3
3
  ③合計値が±60以内のものの集合を作ります。
4
4
  ④それぞれの集合内で比較して条件満たすものを削除します。
5
5
 
6
- 削除の要件より緩くて確かめやすい前処理をすることです。
6
+ 削除の要件より緩くて確かめやすい前処理をすることです。
7
+
8
+ ---
9
+
10
+ て、1個目の値でソートするだけでnlognですやん。
11
+ また無駄なことをしてしまいました。