Submission #829832

#TimeUsernameProblemLanguageResultExecution timeMemory
829832FatihSolakCircle selection (APIO18_circle_selection)C++17
0 / 100
2871 ms171308 KiB
#include <bits/stdc++.h> #define N 100005 using namespace std; int x[N],y[N],c[N]; int ans[N]; void solve(){ int n; cin >> n; vector<int> ord; for(int i = 1;i<=n;i++){ cin >> x[i] >> y[i] >> c[i]; ord.push_back(i); } sort(ord.begin(),ord.end(),[&](int a,int b){ if(c[a] == c[b]) return a < b; return c[a] > c[b]; }); set<pair<long long,int>> s[3][3][3]; for(auto u:ord){ int num = -1; vector<int> cand; for(int i = -1;i<=1;i++){ for(int j = -1;j<=1;j++){ for(int k = -1;k<=1;k++){ long long sum = 0; sum += i * x[u]; sum += j * y[u]; sum += k * c[u]; auto it = s[i + 1][j + 1][k + 1].lower_bound({sum,0}); if(it != s[i+1][j+1][k+1].end()){ cand.push_back(it->second); } if(it != s[i+1][j+1][k+1].begin()){ cand.push_back(prev(it)->second); } } } } for(auto cc:cand){ long long val1 = (long long)(c[u] + c[cc]) *(c[u] + c[cc]); long long val2 = (long long)(x[u] - x[cc]) *(x[u] - x[cc]) + (long long)(y[u] - y[cc]) *(y[u] - y[cc]); if(val2 <= val1){ if(num == -1 || u < num) num = cc; } } if(num == -1){ ans[u] = u; for(int i = -1;i<=1;i++){ for(int j = -1;j<=1;j++){ for(int k = -1;k<=1;k++){ long long sum = 0; sum += i * x[u]; sum += j * y[u]; sum += k * c[u]; s[i + 1][j + 1][k + 1].insert({sum,u}); } } } } else ans[u] = num; } for(int i = 1;i<=n;i++){ cout << ans[i] << ' '; } } int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); #ifdef Local freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif int t = 1; //cin >> t; while(t--){ solve(); } }
#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...