#include <bits/stdc++.h>
using namespace std;
const int maxN = 3*1e5+1;
int n;
//radius, index, pos.x, pos.y
set<pair<int, pair<int, pair<int, int>>>> a;
int removedBy[maxN];
long long square(int a){
return a*a;
}
int main()
{
cin>>n;
for(int i = 1; i <= n; i++){
int b, c, d;
cin>>b>>c>>d;
a.insert({-d, {i,{b, c}}});
}
while(!a.empty()){
pair<int, pair<int, pair<int, int>>> temp = (*a.begin());
int r=temp.first, ind=temp.second.first, posX=temp.second.second.first, posY=temp.second.second.second;
a.erase(a.begin());
removedBy[ind]=ind;
vector<pair<int, pair<int, pair<int, int>>>> removeList;
for(auto x : a){
if(square(abs(x.second.second.first-posX))+square(abs(x.second.second.second-posY))<=square((r*-1)+(x.first*-1)))removeList.push_back(x);
}
for(auto x : removeList){
a.erase(a.find(x));
removedBy[x.second.first]=ind;
}
}
for(int i = 1; i <= n; i++){
cout<<removedBy[i]<<" ";
}
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
204 KB |
Output is correct |
2 |
Incorrect |
0 ms |
204 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
648 ms |
25512 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
0 ms |
204 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
516 ms |
24120 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
204 KB |
Output is correct |
2 |
Incorrect |
0 ms |
204 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
204 KB |
Output is correct |
2 |
Incorrect |
0 ms |
204 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |