제출 #216448

#제출 시각아이디문제언어결과실행 시간메모리
216448theStaticMind원 고르기 (APIO18_circle_selection)C++14
0 / 100
1072 ms59328 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; bool Q = true; struct circle{ int x, y, r, id; bool operator<(const circle& a)const{ if(Q) return r > a.r || (r == a.r && id < a.id); else 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; set<circle> data; int n; cin >> n; vector<int> ans(n); for(int i = 0; i < n; i++){ int x, y, r; cin >> x >> y >> r; Q = false; X.insert({x, y, r, i}); Q = true; data.insert({x, y, r, i}); } while(!data.empty()){ Q = true; circle c = *data.begin(); data.erase(data.begin()); Q = false; auto itr = X.find(c); auto i = next(itr); while((i = next(itr)) != X.end() && i->x - itr->x <= i->r + itr->r){ circle t = *i; ans[t.id] = itr->id; X.erase(i); Q = true; data.erase(t); Q = false; } i = prev(itr); while(itr != X.begin() && itr->x - i->x <= i->r + itr->r){ circle t = *i; ans[t.id] = itr->id; X.erase(i); Q = true; data.erase(t); Q = false; i = prev(itr); } circle t = *itr; ans[t.id] = itr->id; X.erase(itr); Q = true; } 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...