Submission #1313211

#TimeUsernameProblemLanguageResultExecution timeMemory
1313211jahongirCircle selection (APIO18_circle_selection)C++20
0 / 100
2614 ms1114112 KiB
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")

#include <bits/stdc++.h>
using namespace std;

#define pb push_back
#define all(a) a.begin(),a.end()

typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef unsigned long long ull;
typedef vector<int> vi;


bool check(const array<int,3> &a, const array<int,3> &b){
    ll dx = a[0]-b[0], dy = a[1]-b[1], r = a[2]+b[2];
    return dx*dx + dy*dy <= r*r;
}


void solve(){
    int n; cin >> n;

    vector<array<int,3>> vec(n);
    map<pii,set<int>> mp;
    int cnt = 0;
    for(auto &[x,y,r] : vec){
        cin >> x >> y >> r;
        mp[{x/r,y/r}].insert(cnt++);
    }

    vector<int> ind(n);
    iota(all(ind),0);


    sort(all(ind),[&](const int &i, const int &j){
        if(vec[i][2]==vec[j][2]) return i < j;
        return vec[i][2] > vec[j][2];
    });

    vector<int> res(n,-1);
    int r = vec[ind[0]][2];

    int lim = 10;

    for(int i = 0; i < n; i++) if(res[ind[i]]==-1){
        int x = vec[ind[i]][0], y = vec[ind[i]][1];
        for(int dx = -lim; dx <= lim; dx++)
            for(int dy = -lim; dy <= lim; dy++){
                vector<int> rem;
                for(auto j : mp[{x/r+dx,y/r+dy}]){
                    if(check(vec[ind[i]],vec[j])){
                        rem.emplace_back(j);
                        res[j] = ind[i];
                    }
                }
                for(auto j : rem)
                    mp[{x/r+dx,y/r+dy}].erase(j);
            }
    }

    for(auto x : res) cout << x+1 << ' ';
}



signed main(){
    cin.tie(0)->sync_with_stdio(0);


    int t = 1;
    // cin >> t;
    while(t--){solve();}
}
#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...