#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
inline long long sq(long long x) { return x * x; }
typedef struct Circle{
int x, y;
int r;
int i;
Circle(int i_, int x_, int y_, int r_){ i = i_, x = x_, y = y_, r = r_; }
bool meet(const Circle &c) const{
return (sq((long long) (x - c.x)) + sq((long long) (y - c.y)) <= sq((long long) (r + c.r)));
}
bool operator < (const Circle &c) const{
if (r != c.r) return r > c.r;
return i < c.i;
}
} Circle;
vector<Circle> L;
set<pii> S; //bst w/ x-coord & index
int ans[300000];
bool vis[300000];
int N;
int input(){
scanf("%d", &N);
int minr = 1<<30;
int maxr = -1;
bool ally0 = 1;
int x, y, r;
for (int i=0; i<N; i++){
scanf("%d%d%d", &x, &y, &r);
L.push_back(Circle(i, x, y, r));
minr = min(minr, r);
maxr = max(maxr, r);
if (y != 0) ally0 = 0;
}
if (ally0) return 2;
if (N <= 5000) return 1;
if (minr == maxr) return 4;
return 3; // we skip sub5/6 we assume sub3
}
void sub1(){
sort(L.begin(), L.end());
for (int i=0; i<N; i++){
if (vis[i]) continue;
int ind = L[i].i;
ans[ind] = ind;
vis[i] = 1;
for (int j=0; j<N; j++){
if (vis[j]) continue;
if (L[i].meet(L[j])){
ans[L[j].i] = ind;
vis[j] = 1;
}
}
}
}
void sub2(){
sort(L.begin(), L.end());
for (int i=0; i<N; i++){
S.insert(pii(L[i].x - L[i].r, i));
S.insert(pii(L[i].x + L[i].r, i));
}
set<pii>::iterator iter;
for (int i=0; i<N; i++){
if (vis[i]) continue;
int ind = L[i].i;
ans[ind] = ind;
vis[i] = 1;
iter = S.lower_bound(make_pair(L[i].x-L[i].r, 0));
pii com = pii(L[i].x+L[i].r, 1000000);
for (;(*iter)<com;){
int j = (*iter).second;
if (!vis[j]){
ans[L[j].i] = ind;
vis[j] = 1;
}
S.erase(iter);
if (iter == S.end()) break;
}
}
}
int main(void){
int st = input();
if (st == 1){
sub1();
for (int i=0; i<N; i++){
printf("%d ", ans[i]+1);
}
printf("\n");
}
else if (st == 2){
sub2();
for (int i=0; i<N; i++) printf("%d ", ans[i] + 1);
printf("\n");
}
else{
printf("-1");
}
}
Compilation message
circle_selection.cpp: In function 'int input()':
circle_selection.cpp:30:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &N);
~~~~~^~~~~~~~~~
circle_selection.cpp:36:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d%d", &x, &y, &r);
~~~~~^~~~~~~~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
504 KB |
Output is correct |
2 |
Correct |
2 ms |
516 KB |
Output is correct |
3 |
Correct |
2 ms |
588 KB |
Output is correct |
4 |
Correct |
2 ms |
648 KB |
Output is correct |
5 |
Correct |
3 ms |
648 KB |
Output is correct |
6 |
Correct |
3 ms |
648 KB |
Output is correct |
7 |
Correct |
3 ms |
648 KB |
Output is correct |
8 |
Correct |
2 ms |
648 KB |
Output is correct |
9 |
Correct |
3 ms |
648 KB |
Output is correct |
10 |
Correct |
3 ms |
648 KB |
Output is correct |
11 |
Correct |
3 ms |
648 KB |
Output is correct |
12 |
Correct |
2 ms |
776 KB |
Output is correct |
13 |
Correct |
2 ms |
776 KB |
Output is correct |
14 |
Correct |
3 ms |
776 KB |
Output is correct |
15 |
Correct |
2 ms |
776 KB |
Output is correct |
16 |
Correct |
3 ms |
812 KB |
Output is correct |
17 |
Correct |
3 ms |
812 KB |
Output is correct |
18 |
Correct |
3 ms |
812 KB |
Output is correct |
19 |
Correct |
8 ms |
1192 KB |
Output is correct |
20 |
Correct |
7 ms |
1344 KB |
Output is correct |
21 |
Correct |
7 ms |
1512 KB |
Output is correct |
22 |
Correct |
67 ms |
1668 KB |
Output is correct |
23 |
Correct |
53 ms |
1816 KB |
Output is correct |
24 |
Correct |
55 ms |
1948 KB |
Output is correct |
25 |
Correct |
73 ms |
2216 KB |
Output is correct |
26 |
Correct |
79 ms |
2216 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
1037 ms |
74700 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
74700 KB |
Output is correct |
2 |
Incorrect |
82 ms |
74700 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
195 ms |
74700 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
504 KB |
Output is correct |
2 |
Correct |
2 ms |
516 KB |
Output is correct |
3 |
Correct |
2 ms |
588 KB |
Output is correct |
4 |
Correct |
2 ms |
648 KB |
Output is correct |
5 |
Correct |
3 ms |
648 KB |
Output is correct |
6 |
Correct |
3 ms |
648 KB |
Output is correct |
7 |
Correct |
3 ms |
648 KB |
Output is correct |
8 |
Correct |
2 ms |
648 KB |
Output is correct |
9 |
Correct |
3 ms |
648 KB |
Output is correct |
10 |
Correct |
3 ms |
648 KB |
Output is correct |
11 |
Correct |
3 ms |
648 KB |
Output is correct |
12 |
Correct |
2 ms |
776 KB |
Output is correct |
13 |
Correct |
2 ms |
776 KB |
Output is correct |
14 |
Correct |
3 ms |
776 KB |
Output is correct |
15 |
Correct |
2 ms |
776 KB |
Output is correct |
16 |
Correct |
3 ms |
812 KB |
Output is correct |
17 |
Correct |
3 ms |
812 KB |
Output is correct |
18 |
Correct |
3 ms |
812 KB |
Output is correct |
19 |
Correct |
8 ms |
1192 KB |
Output is correct |
20 |
Correct |
7 ms |
1344 KB |
Output is correct |
21 |
Correct |
7 ms |
1512 KB |
Output is correct |
22 |
Correct |
67 ms |
1668 KB |
Output is correct |
23 |
Correct |
53 ms |
1816 KB |
Output is correct |
24 |
Correct |
55 ms |
1948 KB |
Output is correct |
25 |
Correct |
73 ms |
2216 KB |
Output is correct |
26 |
Correct |
79 ms |
2216 KB |
Output is correct |
27 |
Incorrect |
12 ms |
74700 KB |
Output isn't correct |
28 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
504 KB |
Output is correct |
2 |
Correct |
2 ms |
516 KB |
Output is correct |
3 |
Correct |
2 ms |
588 KB |
Output is correct |
4 |
Correct |
2 ms |
648 KB |
Output is correct |
5 |
Correct |
3 ms |
648 KB |
Output is correct |
6 |
Correct |
3 ms |
648 KB |
Output is correct |
7 |
Correct |
3 ms |
648 KB |
Output is correct |
8 |
Correct |
2 ms |
648 KB |
Output is correct |
9 |
Correct |
3 ms |
648 KB |
Output is correct |
10 |
Correct |
3 ms |
648 KB |
Output is correct |
11 |
Correct |
3 ms |
648 KB |
Output is correct |
12 |
Correct |
2 ms |
776 KB |
Output is correct |
13 |
Correct |
2 ms |
776 KB |
Output is correct |
14 |
Correct |
3 ms |
776 KB |
Output is correct |
15 |
Correct |
2 ms |
776 KB |
Output is correct |
16 |
Correct |
3 ms |
812 KB |
Output is correct |
17 |
Correct |
3 ms |
812 KB |
Output is correct |
18 |
Correct |
3 ms |
812 KB |
Output is correct |
19 |
Correct |
8 ms |
1192 KB |
Output is correct |
20 |
Correct |
7 ms |
1344 KB |
Output is correct |
21 |
Correct |
7 ms |
1512 KB |
Output is correct |
22 |
Correct |
67 ms |
1668 KB |
Output is correct |
23 |
Correct |
53 ms |
1816 KB |
Output is correct |
24 |
Correct |
55 ms |
1948 KB |
Output is correct |
25 |
Correct |
73 ms |
2216 KB |
Output is correct |
26 |
Correct |
79 ms |
2216 KB |
Output is correct |
27 |
Runtime error |
1037 ms |
74700 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
28 |
Halted |
0 ms |
0 KB |
- |