Submission #1313217

#TimeUsernameProblemLanguageResultExecution timeMemory
1313217jahongir원 고르기 (APIO18_circle_selection)C++20
0 / 100
3121 ms709528 KiB
#pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #include <bits/stdc++.h> using namespace std; #define pb push_back #define all(a) a.begin(),a.end() typedef long long ll; typedef pair<int,int> pii; typedef pair<ll,ll> pll; typedef unsigned long long ull; typedef vector<int> vi; bool check(const array<int,3> &a, const array<int,3> &b){ ll dx = a[0]-b[0], dy = a[1]-b[1], r = a[2]+b[2]; return dx*dx + dy*dy <= r*r; } void solve(){ int n; cin >> n; vector<array<int,3>> vec(n); map<ll,set<int>> mp; int cnt = 0; for(auto &[x,y,r] : vec){ cin >> x >> y >> r; mp[(x/r) + ((y/r)<<30)].insert(cnt++); } vector<int> ind(n); iota(all(ind),0); sort(all(ind),[&](const int &i, const int &j){ if(vec[i][2]==vec[j][2]) return i < j; return vec[i][2] > vec[j][2]; }); vector<int> res(n,-1); int r = vec[ind[0]][2]; int lim = 3; for(int i = 0; i < n; i++) if(res[ind[i]]==-1){ int x = vec[ind[i]][0], y = vec[ind[i]][1]; for(int dx = -lim; dx <= lim; dx++) for(int dy = -lim; dy <= lim; dy++){ vector<int> rem; for(auto j : mp[(x/r+dx)+((y/r+dy)<<30)]){ if(check(vec[ind[i]],vec[j])){ rem.emplace_back(j); res[j] = ind[i]; } } for(auto j : rem) mp[(x/r+dx)+((y/r+dy)<<30)].erase(j); } } for(auto x : res) cout << x+1 << ' '; } signed main(){ cin.tie(0)->sync_with_stdio(0); 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...