# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
88924 | asifthegreat | Circle selection (APIO18_circle_selection) | C++14 | 178 ms | 14176 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 500003;
int ans[N];
bitset<500000>done;
struct point{
ll x,y,indx,r;
}ara[N];
bool operator<(point a, point b){
if(a.r != b.r)return a.r > b.r;
return a.indx < b.indx;
}
bool can_do(int i,int j)
{
auto a = ara[i];
auto b = ara[j];
ll k = (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
if((a.r+b.r)*(a.r+b.r) >= k)return true;return false;
}
int main()
{
int n;
scanf("%d",&n);
for(int i = 1; i <= n;i++){
scanf("%lld %lld %lld",&ara[i].x,&ara[i].y,&ara[i].r);
ara[i].indx = i;
}
sort(ara+1,ara+1+n);
if(n <= 5000){
for(int i = 1; i <= n;i++){
if(done[i])continue;
for(int j = 1; j <= n;j++){
if(!done[j] and can_do(i,j)){
ans[ara[j].indx] = ara[i].indx;
done[j] = true;
}
}
}
for(int i = 1; i <= n;i++){
printf("%d ",ans[i]);
}puts("");
exit(0);
}
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |