제출 #217763

#제출 시각아이디문제언어결과실행 시간메모리
217763Vimmer원 고르기 (APIO18_circle_selection)C++14
7 / 100
3087 ms60220 KiB
#include <bits/stdc++.h> #define F first #define S second #define sz(x) int(x.size()) #define pb push_back #define N 300005 #define M ll(998244353) using namespace std; typedef long double ld; typedef long long ll; typedef short int si; int ans[N]; set <pair <int, int> > se, sl, sr; int main() { ios_base::sync_with_stdio(0); istream::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; for (int i = 0; i < n; i++) ans[i] = -1; ld x[n], y[n], r[n]; bool f = 1; for (int i = 0; i < n; i++) {int X, Y, R; cin >> X >> Y >> R; if (Y != 0) f = 0; x[i] = X; y[i] = Y; r[i] = R;} if (f) { for (int i = 0; i < n; i++) {se.insert({r[i], i}); sl.insert({x[i] - r[i], i}); sr.insert({x[i] + r[i], i});} while (sz(se) > 0) { pair <int, int> pt = *se.rbegin(); auto it = sl.lower_bound({x[pt.S] - r[pt.S], -1e9}); vector <int> del; del.clear(); while (it != sl.end()) { if ((*it).F > x[pt.S] + r[pt.S]) break; del.pb((*it).S); it++; } auto itr = sr.upper_bound({x[pt.S] + r[pt.S], -1e9}); if (itr != sr.begin()) { itr--; while (itr != sr.begin()) { if ((*itr).F < x[pt.S] - r[pt.S]) break; del.pb((*itr).S); itr--; } } for (auto it : del) { ans[it] = pt.S + 1; se.erase({r[it], it}); sl.erase({x[it] - r[it], it}); sr.erase({x[it] + r[it], it}); } } for (int i = 0; i < n; i++) cout << ans[i] << " "; exit(0); } int s = n; while (s > 0) { int nm = -1; for (int i = 0; i < n; i++) { if (ans[i] != -1) continue; if (nm == -1 || r[nm] < r[i]) nm = i; } for (int i = 0; i < n; i++) { if (ans[i] != -1) continue; ld rst = sqrt(pow(abs(x[nm] - x[i]), 2) + pow(abs(y[nm] - y[i]), 2)); if (r[nm] + r[i] >= rst) {ans[i] = nm + 1; s--;} } } for (int i = 0; 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...