Submission #54086

#TimeUsernameProblemLanguageResultExecution timeMemory
54086Bodo171Circle selection (APIO18_circle_selection)C++14
7 / 100
170 ms8268 KiB
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
const int nmax=100005;
pair<int,int>  v[nmax];
long long x[nmax],y[nmax],r[nmax];
int tt[nmax];
int n,i,j;
bool ok(int A,int B)
{
    return (1LL*(x[A]-x[B])*(x[A]-x[B])+1LL*(y[A]-y[B])*(y[A]-y[B])<=1LL*(r[A]+r[B])*(r[A]+r[B]));
}
bool comp(pair<int,int> unu,pair<int,int> doi)
{
    if(unu.first==doi.first) return unu.second<doi.second;
    return unu.first>doi.first;
}
int main()
{
    //freopen("data.in","r",stdin);
    cin>>n;
    bool zr=1;
    for(i=1;i<=n;i++)
    {
        cin>>x[i]>>y[i]>>r[i];
        v[i].first=r[i];
        v[i].second=i;
        if(y[i]!=0)
        {
            zr=0;
        }
    }
    if(n<=5000)
    {
        sort(v+1,v+n+1,comp);
        for(i=1;i<=n;i++)
            if(!tt[v[i].second])
        {
            tt[v[i].second]=v[i].second;
            for(j=i+1;j<=n;j++)
            {
                if(ok(v[i].second,v[j].second)&&(!tt[v[j].second]))
                    tt[v[j].second]=v[i].second;
            }
        }
        for(i=1;i<=n;i++)
            cout<<tt[i]<<' ';
        return 0;
    }
    if(zr)
    {
        return 0;
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...