#include <bits/stdc++.h>
using namespace std;
void just_do_it();
int main() {
#ifdef KAMIRULEZ
freopen("kamirulez.inp", "r", stdin);
freopen("kamirulez.out", "w", stdout);
#endif
ios_base::sync_with_stdio(0);
cin.tie(0);
just_do_it();
return 0;
}
struct circle {
int x, y, r;
};
bool intersect(circle C1, circle C2) {
return 1LL * (C1.r + C2.r) * (C1.r + C2.r) >= 1LL * (C1.x - C2.x) * (C1.x - C2.x) + 1LL * (C1.y - C2.y) * (C1.y - C2.y);
}
const int maxn = 3e5 + 20;
circle C[maxn];
int res[maxn];
set<pair<int, int>> S;
map<pair<int, int>, set<int>> groups;
int n;
int floor(int a, int b) {
return (a / b) - (a % b && (a ^ b) < 0);
}
void build(int len) {
groups.clear();
for (auto p: S) {
int i = p.second;
int cx = floor(C[i].x, len);
int cy = floor(C[i].y, len);
groups[{cx, cy}].insert(i);
}
}
void just_do_it() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> C[i].x >> C[i].y >> C[i].r;
S.insert({-C[i].r, i});
}
int len = 2e9 + 20;
while (!S.empty()) {
int cur = S.begin()->second;
if (C[cur].r * 3.0 < len) {
len = C[cur].r;
build(len);
}
int cx = floor(C[cur].x, len);
int cy = floor(C[cur].y, len);
for (int i = -2; i <= 2; i++) {
for (int j = -2; j <= 2; j++) {
auto g_it = groups.find({cx + i, cy + j});
if (g_it == groups.end()) {
continue;
}
auto it = g_it->second.begin();
while (it != g_it->second.end()) {
int can = *it;
if (intersect(C[cur], C[can])) {
res[can] = cur;
it = g_it->second.erase(it);
S.erase({-C[can].r, can});
}
else {
it++;
}
}
}
}
}
for (int i = 1; i <= n; i++) {
cout << res[i] << " ";
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
1 ms |
212 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Execution timed out |
3095 ms |
212 KB |
Time limit exceeded |
7 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
646 ms |
35524 KB |
Output is correct |
2 |
Correct |
639 ms |
35644 KB |
Output is correct |
3 |
Correct |
692 ms |
35492 KB |
Output is correct |
4 |
Execution timed out |
3038 ms |
18232 KB |
Time limit exceeded |
5 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
540 ms |
21448 KB |
Output is correct |
3 |
Correct |
1942 ms |
63660 KB |
Output is correct |
4 |
Correct |
1961 ms |
63680 KB |
Output is correct |
5 |
Correct |
1828 ms |
57680 KB |
Output is correct |
6 |
Correct |
657 ms |
29448 KB |
Output is correct |
7 |
Correct |
285 ms |
16020 KB |
Output is correct |
8 |
Correct |
33 ms |
3496 KB |
Output is correct |
9 |
Correct |
2169 ms |
62916 KB |
Output is correct |
10 |
Correct |
1760 ms |
53820 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1543 ms |
63652 KB |
Output is correct |
2 |
Correct |
1122 ms |
63572 KB |
Output is correct |
3 |
Correct |
744 ms |
43132 KB |
Output is correct |
4 |
Correct |
1140 ms |
63872 KB |
Output is correct |
5 |
Correct |
1106 ms |
63628 KB |
Output is correct |
6 |
Correct |
624 ms |
36324 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
1 ms |
212 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Execution timed out |
3095 ms |
212 KB |
Time limit exceeded |
7 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
1 ms |
212 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Execution timed out |
3095 ms |
212 KB |
Time limit exceeded |
7 |
Halted |
0 ms |
0 KB |
- |