Submission #316906

# Submission time Handle Problem Language Result Execution time Memory
316906 2020-10-28T14:33:29 Z casperwang Circle selection (APIO18_circle_selection) C++14
100 / 100
2044 ms 25540 KB
#include <bits/stdc++.h>
#define pb push_back
#define ll long long
#define pii pair<int,int>
#define ppi pair<pii,int>
#define ff first
#define ss second
using namespace std;

const int MAXN = 300000;

struct Cir{
  int x, y, r, id;
  Cir() {}
  Cir(int _x, int _y, int _r, int _id) {
    x = _x, y = _y, r = _r, id = _id;
  }
};

bool intersect(const Cir &a, const Cir &b) {
  return (ll)(a.x-b.x)*(a.x-b.x)+(ll)(a.y-b.y)*(a.y-b.y) <= (ll)(a.r+b.r)*(a.r+b.r);
}

signed main() {
  ios_base::sync_with_stdio(0), cin.tie(0);
  int n;
  cin >> n;
  vector <Cir> cir, tmp;
  for (int i = 0; i < n; i++) {
    int x, y, r;
    cin >> x >> y >> r;
    cir.pb(Cir(x, y, r, i+1));
  }
  sort(cir.begin(), cir.end(), [](const Cir a, const Cir b){
      return a.r != b.r ? a.r > b.r : a.id < b.id;
      });
  int now_r = cir[0].r+1;
  vector <int> ans(n+1);
  while (cir.size()) {
    vector <ppi> arr;
    for (int i = 0; i < cir.size(); i++)
      arr.pb(ppi(pii(cir[i].x / now_r, cir[i].y / now_r), i));
    sort(arr.begin(), arr.end());
    for (Cir C : cir) {
      if (ans[C.id]) continue;
      if (C.r < now_r/2) break;
      int X = C.x / now_r, Y = C.y / now_r;
      ppi grid;
      grid.ss = 0;
      grid.ff.ss = Y-2;
      for (int i = X-2; i <= X+2; i++) {
        grid.ff.ff = i;
        int p = lower_bound(arr.begin(), arr.end(), grid) - arr.begin();
        if (p == arr.size() || arr[p].ff.ff != i) continue;
        while (p < arr.size() && arr[p].ff.ff == i && arr[p].ff.ss <= Y+2) {
          if (!ans[cir[arr[p].ss].id] && intersect(C, cir[arr[p].ss]))
            ans[cir[arr[p].ss].id] = C.id;
          p++;
        }
      }
    }
    arr.clear();
    for (Cir C : cir)
      if (!ans[C.id]) tmp.pb(C);
    cir = tmp;
    tmp.clear();
    now_r /= 2;
  }
  for (int i = 1; i <= n; i++)
    cout << ans[i] << " \n"[i==n];
  return 0;
}

Compilation message

circle_selection.cpp: In function 'int main()':
circle_selection.cpp:41:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<Cir>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   41 |     for (int i = 0; i < cir.size(); i++)
      |                     ~~^~~~~~~~~~~~
circle_selection.cpp:54:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<std::pair<int, int>, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   54 |         if (p == arr.size() || arr[p].ff.ff != i) continue;
      |             ~~^~~~~~~~~~~~~
circle_selection.cpp:55:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<std::pair<int, int>, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   55 |         while (p < arr.size() && arr[p].ff.ff == i && arr[p].ff.ss <= Y+2) {
      |                ~~^~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 384 KB Output is correct
2 Correct 0 ms 384 KB Output is correct
3 Correct 1 ms 384 KB Output is correct
4 Correct 0 ms 384 KB Output is correct
5 Correct 1 ms 384 KB Output is correct
6 Correct 1 ms 384 KB Output is correct
7 Correct 0 ms 384 KB Output is correct
8 Correct 1 ms 384 KB Output is correct
9 Correct 1 ms 384 KB Output is correct
10 Correct 1 ms 384 KB Output is correct
11 Correct 1 ms 384 KB Output is correct
12 Correct 1 ms 384 KB Output is correct
13 Correct 1 ms 384 KB Output is correct
14 Correct 1 ms 384 KB Output is correct
15 Correct 1 ms 384 KB Output is correct
16 Correct 1 ms 384 KB Output is correct
17 Correct 1 ms 384 KB Output is correct
18 Correct 1 ms 384 KB Output is correct
19 Correct 4 ms 768 KB Output is correct
20 Correct 4 ms 768 KB Output is correct
21 Correct 4 ms 768 KB Output is correct
22 Correct 6 ms 768 KB Output is correct
23 Correct 7 ms 768 KB Output is correct
24 Correct 6 ms 768 KB Output is correct
25 Correct 6 ms 768 KB Output is correct
26 Correct 6 ms 768 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 192 ms 15828 KB Output is correct
2 Correct 221 ms 15828 KB Output is correct
3 Correct 219 ms 22676 KB Output is correct
4 Correct 206 ms 22612 KB Output is correct
5 Correct 228 ms 20524 KB Output is correct
6 Correct 314 ms 20564 KB Output is correct
7 Correct 252 ms 20824 KB Output is correct
8 Correct 254 ms 20564 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 384 KB Output is correct
2 Correct 156 ms 5356 KB Output is correct
3 Correct 495 ms 16400 KB Output is correct
4 Correct 497 ms 16560 KB Output is correct
5 Correct 502 ms 18848 KB Output is correct
6 Correct 205 ms 9608 KB Output is correct
7 Correct 102 ms 4764 KB Output is correct
8 Correct 17 ms 1276 KB Output is correct
9 Correct 538 ms 19272 KB Output is correct
10 Correct 484 ms 22100 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 440 ms 15848 KB Output is correct
2 Correct 361 ms 15832 KB Output is correct
3 Correct 276 ms 15836 KB Output is correct
4 Correct 379 ms 23380 KB Output is correct
5 Correct 368 ms 23508 KB Output is correct
6 Correct 260 ms 24404 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 384 KB Output is correct
2 Correct 0 ms 384 KB Output is correct
3 Correct 1 ms 384 KB Output is correct
4 Correct 0 ms 384 KB Output is correct
5 Correct 1 ms 384 KB Output is correct
6 Correct 1 ms 384 KB Output is correct
7 Correct 0 ms 384 KB Output is correct
8 Correct 1 ms 384 KB Output is correct
9 Correct 1 ms 384 KB Output is correct
10 Correct 1 ms 384 KB Output is correct
11 Correct 1 ms 384 KB Output is correct
12 Correct 1 ms 384 KB Output is correct
13 Correct 1 ms 384 KB Output is correct
14 Correct 1 ms 384 KB Output is correct
15 Correct 1 ms 384 KB Output is correct
16 Correct 1 ms 384 KB Output is correct
17 Correct 1 ms 384 KB Output is correct
18 Correct 1 ms 384 KB Output is correct
19 Correct 4 ms 768 KB Output is correct
20 Correct 4 ms 768 KB Output is correct
21 Correct 4 ms 768 KB Output is correct
22 Correct 6 ms 768 KB Output is correct
23 Correct 7 ms 768 KB Output is correct
24 Correct 6 ms 768 KB Output is correct
25 Correct 6 ms 768 KB Output is correct
26 Correct 6 ms 768 KB Output is correct
27 Correct 7 ms 1152 KB Output is correct
28 Correct 7 ms 1152 KB Output is correct
29 Correct 7 ms 1184 KB Output is correct
30 Correct 14 ms 1152 KB Output is correct
31 Correct 13 ms 1280 KB Output is correct
32 Correct 13 ms 1152 KB Output is correct
33 Correct 70 ms 8168 KB Output is correct
34 Correct 68 ms 8168 KB Output is correct
35 Correct 74 ms 7932 KB Output is correct
36 Correct 143 ms 7784 KB Output is correct
37 Correct 143 ms 7908 KB Output is correct
38 Correct 146 ms 8020 KB Output is correct
39 Correct 581 ms 7860 KB Output is correct
40 Correct 566 ms 7880 KB Output is correct
41 Correct 577 ms 7968 KB Output is correct
42 Correct 80 ms 6632 KB Output is correct
43 Correct 113 ms 7656 KB Output is correct
44 Correct 116 ms 7656 KB Output is correct
45 Correct 114 ms 7660 KB Output is correct
46 Correct 113 ms 7660 KB Output is correct
47 Correct 111 ms 7784 KB Output is correct
48 Correct 115 ms 7656 KB Output is correct
49 Correct 113 ms 7660 KB Output is correct
50 Correct 113 ms 7660 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 384 KB Output is correct
2 Correct 0 ms 384 KB Output is correct
3 Correct 1 ms 384 KB Output is correct
4 Correct 0 ms 384 KB Output is correct
5 Correct 1 ms 384 KB Output is correct
6 Correct 1 ms 384 KB Output is correct
7 Correct 0 ms 384 KB Output is correct
8 Correct 1 ms 384 KB Output is correct
9 Correct 1 ms 384 KB Output is correct
10 Correct 1 ms 384 KB Output is correct
11 Correct 1 ms 384 KB Output is correct
12 Correct 1 ms 384 KB Output is correct
13 Correct 1 ms 384 KB Output is correct
14 Correct 1 ms 384 KB Output is correct
15 Correct 1 ms 384 KB Output is correct
16 Correct 1 ms 384 KB Output is correct
17 Correct 1 ms 384 KB Output is correct
18 Correct 1 ms 384 KB Output is correct
19 Correct 4 ms 768 KB Output is correct
20 Correct 4 ms 768 KB Output is correct
21 Correct 4 ms 768 KB Output is correct
22 Correct 6 ms 768 KB Output is correct
23 Correct 7 ms 768 KB Output is correct
24 Correct 6 ms 768 KB Output is correct
25 Correct 6 ms 768 KB Output is correct
26 Correct 6 ms 768 KB Output is correct
27 Correct 192 ms 15828 KB Output is correct
28 Correct 221 ms 15828 KB Output is correct
29 Correct 219 ms 22676 KB Output is correct
30 Correct 206 ms 22612 KB Output is correct
31 Correct 228 ms 20524 KB Output is correct
32 Correct 314 ms 20564 KB Output is correct
33 Correct 252 ms 20824 KB Output is correct
34 Correct 254 ms 20564 KB Output is correct
35 Correct 1 ms 384 KB Output is correct
36 Correct 156 ms 5356 KB Output is correct
37 Correct 495 ms 16400 KB Output is correct
38 Correct 497 ms 16560 KB Output is correct
39 Correct 502 ms 18848 KB Output is correct
40 Correct 205 ms 9608 KB Output is correct
41 Correct 102 ms 4764 KB Output is correct
42 Correct 17 ms 1276 KB Output is correct
43 Correct 538 ms 19272 KB Output is correct
44 Correct 484 ms 22100 KB Output is correct
45 Correct 440 ms 15848 KB Output is correct
46 Correct 361 ms 15832 KB Output is correct
47 Correct 276 ms 15836 KB Output is correct
48 Correct 379 ms 23380 KB Output is correct
49 Correct 368 ms 23508 KB Output is correct
50 Correct 260 ms 24404 KB Output is correct
51 Correct 7 ms 1152 KB Output is correct
52 Correct 7 ms 1152 KB Output is correct
53 Correct 7 ms 1184 KB Output is correct
54 Correct 14 ms 1152 KB Output is correct
55 Correct 13 ms 1280 KB Output is correct
56 Correct 13 ms 1152 KB Output is correct
57 Correct 70 ms 8168 KB Output is correct
58 Correct 68 ms 8168 KB Output is correct
59 Correct 74 ms 7932 KB Output is correct
60 Correct 143 ms 7784 KB Output is correct
61 Correct 143 ms 7908 KB Output is correct
62 Correct 146 ms 8020 KB Output is correct
63 Correct 581 ms 7860 KB Output is correct
64 Correct 566 ms 7880 KB Output is correct
65 Correct 577 ms 7968 KB Output is correct
66 Correct 80 ms 6632 KB Output is correct
67 Correct 113 ms 7656 KB Output is correct
68 Correct 116 ms 7656 KB Output is correct
69 Correct 114 ms 7660 KB Output is correct
70 Correct 113 ms 7660 KB Output is correct
71 Correct 111 ms 7784 KB Output is correct
72 Correct 115 ms 7656 KB Output is correct
73 Correct 113 ms 7660 KB Output is correct
74 Correct 113 ms 7660 KB Output is correct
75 Correct 230 ms 25300 KB Output is correct
76 Correct 223 ms 24660 KB Output is correct
77 Correct 226 ms 24792 KB Output is correct
78 Correct 227 ms 25092 KB Output is correct
79 Correct 276 ms 24660 KB Output is correct
80 Correct 195 ms 25044 KB Output is correct
81 Correct 495 ms 24464 KB Output is correct
82 Correct 484 ms 24328 KB Output is correct
83 Correct 489 ms 24356 KB Output is correct
84 Correct 509 ms 24916 KB Output is correct
85 Correct 491 ms 24336 KB Output is correct
86 Correct 490 ms 24632 KB Output is correct
87 Correct 546 ms 24460 KB Output is correct
88 Correct 1922 ms 25428 KB Output is correct
89 Correct 2021 ms 25540 KB Output is correct
90 Correct 1998 ms 25432 KB Output is correct
91 Correct 1923 ms 25456 KB Output is correct
92 Correct 2044 ms 25428 KB Output is correct
93 Correct 405 ms 23304 KB Output is correct
94 Correct 424 ms 23692 KB Output is correct
95 Correct 402 ms 23180 KB Output is correct
96 Correct 425 ms 23356 KB Output is correct
97 Correct 517 ms 22928 KB Output is correct
98 Correct 349 ms 23252 KB Output is correct
99 Correct 415 ms 23444 KB Output is correct
100 Correct 377 ms 22740 KB Output is correct
101 Correct 423 ms 23252 KB Output is correct
102 Correct 418 ms 23412 KB Output is correct
103 Correct 519 ms 23180 KB Output is correct
104 Correct 406 ms 23184 KB Output is correct
105 Correct 320 ms 20820 KB Output is correct
106 Correct 377 ms 23644 KB Output is correct
107 Correct 387 ms 23760 KB Output is correct
108 Correct 397 ms 23644 KB Output is correct
109 Correct 389 ms 23636 KB Output is correct
110 Correct 377 ms 23640 KB Output is correct
111 Correct 380 ms 23640 KB Output is correct
112 Correct 375 ms 23636 KB Output is correct
113 Correct 374 ms 23860 KB Output is correct
114 Correct 374 ms 23804 KB Output is correct
115 Correct 378 ms 23636 KB Output is correct
116 Correct 360 ms 23756 KB Output is correct