Submission #1236379

#TimeUsernameProblemLanguageResultExecution timeMemory
1236379MinhKienBalloons (CEOI11_bal)C++20
20 / 100
411 ms1964 KiB
#include <iostream>
#include <stdio.h>
#include <math.h>

using namespace std;

int n;
long double x, y, a, b;
long double xl = -1, al;

long double dis(long double m) {
    long double p = sqrt((x - a) * (x - a) + (m - y) * (m - y));
    return p;
}

long double dis2(long double m) {
    return sqrt((a - xl) * (a - xl) + (m - al) * (m - al));
}

long double Find() {
    long double l = 0, r = b, ans = 0;

    for (int i = 1; i <= 100; ++i) {
        long double m = (l + r) / 2.0;

        if (dis(m) >= y + m) {
            if (xl == -1 || dis2(m) >= al + m) {
                ans = m;
                l = m;
            } else {
                r = m;
            }
        } else {
            r = m;
        }
    }

    return ans;
}

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

    cin >> n;
    x = -1e9;
    y = 0;
    for (int i = 1; i <= n; ++i) {
        cin >> a >> b;

        long double ans = Find();
        printf("%.3Lf\n", ans);

        xl = a;
        al = ans;

        if (abs(a + ans - x - y) <= 1e-10) continue;
        if (a + ans > x + y) {
            x = a;
            y = ans;
        }
    }

    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...