제출 #1330366

#제출 시각아이디문제언어결과실행 시간메모리
1330366randi_pavMobile (BOI12_mobile)C++20
0 / 100
240 ms40648 KiB
#include <iostream>
#include <vector>
#include <cmath>
#include <iomanip>

using namespace std;

struct Station {
    double x, y;
};

// Calculate the x-coordinate where two stations are equidistant to the highway
double intersect(Station s1, Station s2) {
    return (s2.x * s2.x + s2.y * s2.y - s1.x * s1.x - s1.y * s1.y) / (2.0 * (s2.x - s1.x));
}

// Distance from station to a point (x, 0) on the highway
double dist(Station s, double x) {
    return sqrt((s.x - x) * (s.x - x) + s.y * s.y);
}

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

    int N;
    double L;
    cin >> N >> L;

    vector<Station> input;
    for (int i = 0; i < N; ++i) {
        double xi, yi;
        cin >> xi >> yi;
        // If x is same, keep only the one closer to y=0
        if (!input.empty() && input.back().x == xi) {
            if (abs(yi) < abs(input.back().y)) input.back().y = yi;
        } else {
            input.push_back({xi, yi});
        }
    }

    vector<Station> stack;
    for (const auto& s : input) {
        while (stack.size() >= 2) {
            if (intersect(stack[stack.size() - 2], stack.back()) >= intersect(stack.back(), s)) {
                stack.pop_back();
            } else {
                break;
            }
        }
        stack.push_back(s);
    }

    double max_d = 0;
    // Check start and end of the highway
    max_d = max(max_d, dist(stack[0], 0.0));
    max_d = max(max_d, dist(stack.back(), L));

    // Check all intersection points that fall within [0, L]
    for (int i = 0; i < (int)stack.size() - 1; ++i) {
        double x_int = intersect(stack[i], stack[i+1]);
        if (x_int > 0 && x_int < L) {
            max_d = max(max_d, dist(stack[i], x_int));
        }
    }

    cout << fixed << setprecision(3) << max_d << 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...