Submission #1348498

#TimeUsernameProblemLanguageResultExecution timeMemory
1348498goodpjw2008Circle selection (APIO18_circle_selection)C++20
15 / 100
2592 ms610944 KiB
#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx,avx2,fma")
#define int long long
using namespace std;
using pii = pair<int,int>;
struct circle{
    int x,y,r,idx;
    bool operator<(const circle &c)const{
        if(r==c.r){
            if(idx!=c.idx)return idx<c.idx;
            if(x!=c.x)return x<c.x;
            return y<c.y;
        }
        return r>c.r;
    }
}inp[300002];
map<pii,vector<int>>mp;
int n,cursz=1e18,ans[300002];
bool alive[300002];
void build(){
    mp.clear();
    for(int i = 1; i <= n; i++){
        if(!alive[i])continue;
        mp[{inp[i].x/cursz,inp[i].y/cursz}].push_back(i);
    }
}
signed main(){
    ios::sync_with_stdio(0);cin.tie(0);
    cin>>n;
    for(int i = 1; i <= n; i++){
        cin>>inp[i].x>>inp[i].y>>inp[i].r;
        inp[i].idx=i;
        alive[i]=1;
    }
    sort(inp+1,inp+n+1);
    for(int i = 1; i <= n; i++){
        if(cursz>inp[i].r*2){
            cursz=inp[i].r;
            build();
        }
        if(!alive[i])continue;
        int x=inp[i].x/cursz,y=inp[i].y/cursz;
        for(int j = x-2; j <= x+2; j++){
            for(int k = y-2; k <= y+2; k++){
                for(auto idx :mp[{j,k}]){
                    int dx=inp[i].x-inp[idx].x,dy=inp[i].y-inp[idx].y,sr=inp[i].r+inp[idx].r;
                    if(dx*dx+dy*dy<=sr*sr){
                        alive[idx]=0;
                        ans[inp[idx].idx]=inp[i].idx;
                    }
                }
            }
        }
    }
    for(int i = 1; i <= n; i++){
        cout<<ans[i]<<' ';
    }
}
#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...