Submission #119068

#TimeUsernameProblemLanguageResultExecution timeMemory
119068Charis02Circle selection (APIO18_circle_selection)C++14
7 / 100
724 ms35980 KiB
#include<iostream> #include<set> #include<cmath> #include<algorithm> #define ll long long #define rep(i,a,b) for(int i = a;i < b;i++) #define N 1000004 #define INF 1e9+7 using namespace std; struct circle{ ll x; ll y; ll r; ll id; }; bool by_r(const circle &a,const circle &b) { if(a.r == b.r) { return a.id < b.id; } return a.r > b.r; } ll n; circle ar[N]; pair < ll,ll > v[N]; bool used[N]; set < ll > rs,ys; ll ans[N]; double dist(ll x1,ll y1,ll x2,ll y2) { return sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)); } bool intersect(const circle &a,const circle &b) { double c1c2 = dist(a.x,a.y,b.x,b.y); return (c1c2 <= a.r + b.r); } void first_subtask() { rep(i,1,n+1) { if(used[i]) continue; else { ans[ar[i].id] = ar[i].id; used[i] = true; rep(j,i+1,n+1) { if(used[j]) continue; if(intersect(ar[i],ar[j])) { ans[ar[j].id] = ar[i].id; used[j] = true; } } } } return; } void second_subtask() { rep(i,1,n+1) { v[i].first = ar[i].x - ar[i].r; v[i].second = ar[i].x + ar[i].r; } sort(v+1,v+n+1); } void third_subtask() { } void fourth_subtask() { } void solve() { cin >> n; rep(i,1,n+1) { cin >> ar[i].x >> ar[i].y >> ar[i].r; ar[i].id = i; rs.insert(ar[i].r); ys.insert(ar[i].y); } sort(ar+1,ar+n+1,by_r); if(n <= 5000) { first_subtask(); } if(ys.size() == 1) { second_subtask(); } else if(rs.size() == 1) { fourth_subtask(); } else { third_subtask(); } rep(i,1,n+1) { cout << ans[i] << " "; } return; } int main() { solve(); 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...