Submission #513033

#TimeUsernameProblemLanguageResultExecution timeMemory
513033KoDOdašiljači (COCI20_odasiljaci)C++17
56 / 70
1087 ms332 KiB
#include <bits/stdc++.h> using std::vector; using std::array; using std::pair; using std::tuple; using i64 = std::int64_t; struct SimpleQueue { int idx; vector<int> data; SimpleQueue(const int n) : idx(0) { data.reserve(n); } void clear() { idx = 0; data.clear(); } void push(const int x) { data.push_back(x); } int pop() { return data[idx++]; } bool empty() const { return idx == (int)data.size(); } }; int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); int N; std::cin >> N; vector<double> X(N), Y(N); for (int i = 0; i < N; ++i) { std::cin >> X[i] >> Y[i]; } vector<char> reach(N); SimpleQueue que(N); const auto check = [&](const double thres) { std::fill(reach.begin(), reach.end(), false); que.clear(); const auto push = [&](const int u) { if (!reach[u]) { reach[u] = true; que.push(u); } }; push(0); while (!que.empty()) { const int u = que.pop(); for (int v = 0; v < N; ++v) { if (std::hypot(X[u] - X[v], Y[u]- Y[v]) <= 2.0 * thres) { push(v); } } } return std::count(reach.begin(), reach.end(), true) == N; }; double ok = 2.0 * 1e9, ng = 0.0; for (int step = 0; step < 55; ++step) { const double md = (ok + ng) / 2.0; (check(md) ? ok : ng) = md; } std::cout << std::fixed << std::setprecision(20); std::cout << ok << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...