回答編集履歴

4

edit

2018/01/12 13:12

投稿

mkgrei
mkgrei

スコア8560

test CHANGED
@@ -58,7 +58,7 @@
58
58
 
59
59
  ans.append(p)
60
60
 
61
- 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
61
+ 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
62
62
 
63
63
  return np.array(ans)
64
64
 

3

edit

2018/01/12 13:12

投稿

mkgrei
mkgrei

スコア8560

test CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
  import numpy as np
34
34
 
35
- N = 10*9
35
+ N = 10**9
36
36
 
37
37
  M = 10000
38
38
 

2

edit

2018/01/12 12:46

投稿

mkgrei
mkgrei

スコア8560

test CHANGED
@@ -19,3 +19,49 @@
19
19
  て、1個目の値でソートするだけでnlognですやん。
20
20
 
21
21
  また無駄なことをしてしまいました。
22
+
23
+
24
+
25
+ ---
26
+
27
+
28
+
29
+ メモリが無限にあると仮定して、O(N)。
30
+
31
+ ```python
32
+
33
+ import numpy as np
34
+
35
+ N = 10*9
36
+
37
+ M = 10000
38
+
39
+ th = 30
40
+
41
+
42
+
43
+ a = np.random.randint(M, size=(N,2))
44
+
45
+ def f(a):
46
+
47
+ mm = np.max(a, axis=0)+1
48
+
49
+ s = np.empty((mm[0], mm[1]), dtype=bool)
50
+
51
+ s.fill(1)
52
+
53
+ ans = []
54
+
55
+ for p in a:
56
+
57
+ if s[p[0], p[1]]:
58
+
59
+ ans.append(p)
60
+
61
+ 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
62
+
63
+ return np.array(ans)
64
+
65
+ ans = f(a)
66
+
67
+ ```

1

edit

2018/01/12 12:38

投稿

mkgrei
mkgrei

スコア8560

test CHANGED
@@ -9,3 +9,13 @@
9
9
 
10
10
 
11
11
  削除の要件より緩くて確かめやすい前処理をすることです。
12
+
13
+
14
+
15
+ ---
16
+
17
+
18
+
19
+ て、1個目の値でソートするだけでnlognですやん。
20
+
21
+ また無駄なことをしてしまいました。