제출 #1157640

#제출 시각아이디문제언어결과실행 시간메모리
1157640byunjaewooCircle selection (APIO18_circle_selection)C++20
23 / 100
1164 ms58800 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int N=300010;
int n, x[N], y[N], r[N], ans[N];
map<pair<int, int>, vector<int>> vec;
set<int> st;

signed main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    cin>>n;
    for(int i=1; i<=n; i++) {
        cin>>x[i]>>y[i]>>r[i], st.insert(i);
        vec[{x[i]/r[i], y[i]/r[i]}].push_back(i);
    }
    while(!st.empty()) {
        int k=(*st.begin());
        for(int dx=-2; dx<=2; dx++) for(int dy=-2; dy<=2; dy++) if(vec.find({x[k]/r[k]+dx, y[k]/r[k]+dy})!=vec.end()) {
            vector<int> tmp, tmp2;
            swap(tmp, vec[{x[k]/r[k]+dx, y[k]/r[k]+dy}]);
            for(int i:tmp) {
                if((x[i]-x[k])*(x[i]-x[k])+(y[i]-y[k])*(y[i]-y[k])<=4*r[1]*r[1]) ans[i]=k, st.erase(i);
                else tmp2.push_back(i);
            }
            swap(tmp2, vec[{x[k]/r[k]+dx, y[k]/r[k]+dy}]);
        }
    }
    for(int i=1; i<=n; i++) cout<<ans[i]<<" ";
    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...