제출 #216462

#제출 시각아이디문제언어결과실행 시간메모리
216462theStaticMindCircle selection (APIO18_circle_selection)C++14
0 / 100
502 ms39832 KiB
#include<bits/stdc++.h> #define pb push_back #define ii pair<int,int> #define all(x) (x).begin(),(x).end() #define sz(x) ((int)(x).size()) #define INF 100000000000000000 #define modulo 1000000007 #define mod 998244353 #define int long long int using namespace std; struct circle{ int x, y, r, id; bool operator<(const circle& a)const{ return x < a.x || (x == a.x && id < a.id); } }; int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); set<circle> X; vector<circle> data; int n; cin >> n; vector<int> ans(n, -1); for(int i = 0; i < n; i++){ int x, y, r; cin >> x >> y >> r; X.insert({x, y, r, i}); data.pb({x, y, r, i}); } sort(all(data), [&](circle a, circle b){return a.r > b.r || (a.r == b.r && a.id < b.id);}); for(auto c : data){ if(ans[c.id] >= 0) continue; auto itr = X.find(c); assert(itr != X.end()); while(next(itr) != X.end() && next(itr)->x - itr->x <= next(itr)->r + itr->r){ ans[next(itr)->id] = itr->id; X.erase(next(itr)); } while(itr != X.begin() && itr->x - prev(itr)->x <= prev(itr)->r + itr->r){ ans[prev(itr)->id] = itr->id; X.erase(prev(itr)); } ans[itr->id] = itr->id; X.erase(itr); } for(int i = 0; i < n; i++){ cout << ans[i] + 1 << " "; } }
#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...