제출 #1354017

#제출 시각아이디문제언어결과실행 시간메모리
1354017marcus06Balloons (CEOI11_bal)C++20
20 / 100
208 ms5880 KiB
#include <bits/stdc++.h>
using namespace std;
using lli = long long;

void solve() {
    int n; cin >> n;
    vector <int> x(n), rad(n);
    for (int i = 0; i < n; ++i) {
        cin >> x[i] >> rad[i];
    }

    vector <double> y(n);
    auto skibidi = [&](int i, int j) -> double {
        double l = 0, r = rad[i];
        double dx = x[i] - x[j];
        for (int iter = 0; iter < 64; ++iter) {
            double m = (l + r) / 2;
            double dy = (m - y[j]);
            if (dx * dx + dy * dy >= (m + y[j]) * (m + y[j]))
                l = m;
            else 
                r = m;
        }
        return l;
    };

    stack <int> st;
    for (int i = 0; i < n; ++i) {
        while (!st.empty() && (x[i] - x[st.top()]) < skibidi(i, st.top())) st.pop();
        if (st.empty()) {
            y[i] = rad[i];
        } else {
            y[i] = skibidi(i, st.top());
        }
        st.push(i);
    }

    cout << setprecision(3) << fixed;
    for (auto x: y) {
        cout << x << '\n';
    }
    cout << '\n';
}

int main() {
    std::cin.tie(0)->sync_with_stdio(0);
#ifdef LOCAL
    auto begin = std::chrono::high_resolution_clock::now();
#endif

    int tt = 1;
    while (tt--) {
        solve();
    }

#ifdef LOCAL
    auto end = std::chrono::high_resolution_clock::now();
    auto elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin);
    std::cerr << "Time measured: " << elapsed.count() * 1e-9 << " seconds.\n";
#endif
    return 0;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…