Submission #1163546

#TimeUsernameProblemLanguageResultExecution timeMemory
1163546kedimestanMobile (BOI12_mobile)C++20
0 / 100
103 ms16096 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;
using ld = long double;

ld dist(ld x, ll xi, ll yi) {
    return sqrt((x - xi)*(x - xi) + (ld)(yi*yi));
}

// Function to find the nearest BTS to a point x on the highway
ld nearestDistance(ld x, const vector<pair<ll, ll>>& stations) {
    auto it = lower_bound(stations.begin(), stations.end(), make_pair((ll)x, LLONG_MIN));
    ld minDist = 1e18;

    // Check the BTS at or after x
    if (it != stations.end()) {
        minDist = min(minDist, dist(x, it->first, it->second));
    }
    // Check the BTS before x
    if (it != stations.begin()) {
        --it;
        minDist = min(minDist, dist(x, it->first, it->second));
    }

    return minDist;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    ll N, L;
    cin >> N >> L;

    vector<pair<ll, ll>> stations(N);
    for (auto& s : stations) cin >> s.first >> s.second;

    // Binary search to find the point x[q] that maximizes the distance to the nearest BTS
    ld left = 0.0, right = L;
    ld maxDist = 0.0;

    // Perform binary search until the search space is small enough
    for (int iter = 0; iter < 100; ++iter) {
        ld mid = (left + right) / 2.0;

        // Find the nearest distance at mid and mid + epsilon
        ld distMid = nearestDistance(mid, stations);
        ld distMidEpsilon = nearestDistance(mid + 1e-9, stations);

        // Update the maximum distance found so far
        maxDist = max(maxDist, distMid);

        // Adjust the search boundaries based on whether we are on the increasing or decreasing part
        if (distMid < distMidEpsilon) {
            left = mid;
        } else {
            right = mid;
        }
    }

    // Output the result with the required precision
    cout << fixed << setprecision(6) << maxDist << endl;

    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...
#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...
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...