Submission #860341

#TimeUsernameProblemLanguageResultExecution timeMemory
860341TahirAliyevPark (BOI16_park)C++17
0 / 100
264 ms37564 KiB
#include <bits/stdc++.h> #define ll long long #define pii pair<int, int> using namespace std; const int MAX1 = 2002, MAX2 = 1e5 + 8; struct tree{ double r; int x, y; }; struct edge{ double r; int x, y; }; int n, m, w, h; tree trees[MAX1]; vector<edge> E; vector<array<int, 3>> Q; double dist(int x1, int y1, int x2, int y2){ return sqrt(1ll * (x1 - x2) * (x1 - x2) + 1ll * (y1 - y2) * (y1 - y2)); } int par[MAX2]; string ans[MAX2]; int get(int u){ if(par[u] < 0) return u; return par[u] = get(par[u]); } bool con(int u, int v){ return get(u) == get(v); } void unite(int u, int v){ u = get(u); v = get(v); if(u == v) return; if(-par[u] < -par[v]){ swap(u, v); } par[u] += par[v]; par[v] = u; } bool comp(edge a, edge b){ return a.r < b.r; } int main(){ memset(par, -1, sizeof(par)); cin >> n >> m >> w >> h; for(int i = 1; i <= n; i++){ int x, y, r; cin >> x >> y >> r; trees[i] = {1.0 * r, x, y}; } for(int i = 1; i <= n; i++){ E.push_back({1.0 * trees[i].x - trees[i].r, i, n + 1}); E.push_back({1.0 * h - trees[i].y - trees[i].r, i, n + 2}); E.push_back({1.0 * w - trees[i].x - trees[i].r, i, n + 3}); E.push_back({1.0 * trees[i].y - trees[i].r, i, n + 4}); } for(int i = 1; i <= n; i++){ for(int j = i + 1; j <= n; j++){ double d = dist(trees[i].x, trees[i].y, trees[j].x, trees[j].y); E.push_back({d - trees[i].r - trees[j].r, i, j}); } } sort(E.begin(), E.end(), comp); for(int i = 1; i <= m; i++){ int r, e; cin >> r >> e; Q.push_back({r, e, i}); } sort(Q.begin(), Q.end()); for(int i = 1; i <= m; i++){ ans[i] = ""; } int id = 0; for(auto q : Q){ while(id < E.size() && E[id].r < 2.0 * q[0]){ unite(E[id].x, E[id].y); id++; } bool isB[5]; isB[1] = con(n + 1, n + 2); isB[2] = con(n + 2, n + 3); isB[3] = con(n + 3, n + 4); isB[4] = con(n + 4, n + 1); if(isB[q[1]]){ ans[q[2]] += '0' + q[1]; continue; } for(int i = 1; i <= 4; i++){ if(!isB[i]){ ans[q[2]] += '0' + i; } } } for(int i = 1; i <= m; i++){ cout << ans[i] << '\n'; } }

Compilation message (stderr)

park.cpp: In function 'int main()':
park.cpp:88:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<edge>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   88 |         while(id < E.size() && E[id].r < 2.0 * q[0]){
      |               ~~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...