제출 #49337

#제출 시각아이디문제언어결과실행 시간메모리
49337WLZ원 고르기 (APIO18_circle_selection)C++17
0 / 100
3026 ms13312 KiB
#include <bits/stdc++.h> using namespace std; int n; struct circle { int x, y, r, idx; }; const bool operator>(const circle& lhs, const circle& rhs) { if (lhs.r != rhs.r) return lhs.r > rhs.r; return lhs.idx < rhs.idx; } const bool operator<(const circle& lhs, const circle& rhs) { if (lhs.r != rhs.r) return lhs.r < rhs.r; return lhs.idx > rhs.idx; } bool inter(const circle& a, const circle& b) { long long dist = (a.x - b.x) * 1ll * (a.x - b.x) + (a.y - b.y) * 1ll * (a.y - b.y); return dist <= (a.r + b.r) * 1ll * (a.r + b.r); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin >> n; priority_queue<circle> pq; vector<circle> v; for (int i = 0; i < n; i++) { int x, y, r; cin >> x >> y >> r; pq.push({x, y, r, i}); v.push_back({x, y, r, i}); } vector<int> ans(n); for (int i = 0; i < n; i++) ans[i] = i; while (!pq.empty()) { circle cur = pq.top(); pq.pop(); if (ans[cur.idx] != cur.idx) continue; for (int i = 0; i < n; i++) { if (i != cur.idx) { if (inter(cur, v[i])) { ans[v[i].idx] = cur.idx; } } } } for (int i = 0; i < n; i++) { if (i) cout << ' '; cout << ans[i] + 1; } cout << '\n'; 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...