답안 #755546

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
755546 2023-06-10T09:53:13 Z ZephyrOnFire Balloons (CEOI11_bal) C++17
100 / 100
238 ms 11832 KB
#include <vector>
#include <iostream>
#include <stack>
#include <iomanip>

using namespace std;

struct ustruct
{
    long long x;
    long double r;
};

signed main()
{
    long long n;
    cin >> n;

    long long x[n], maxr[n];
    for (long long i = 0; i < n; i++)
    {
        cin >> x[i] >> maxr[i];
    }

    stack<ustruct> st;
    // cout<<__cplusplus<<endl;
    vector<long double> ans(n, 0.0);
    for (long long i = 0; i < n; i++)
    {
        if (st.empty())
        {
            st.push({x[i],(long double)maxr[i]});
            ans[i] = maxr[i];
        }
        else
        {
                long double curr = 1e10;
            while (!st.empty())
            {
                long long prevx = st.top().x;
                long double prevr = st.top().r;

                long double wantr = ((x[i] - prevx + 0.0) * (x[i] - prevx + 0.0)) / (4 * prevr + 0.0);
                if (wantr >= maxr[i])
                {
                    curr = min((long double)maxr[i], curr);
                }
                else
                {
                    curr = min(wantr, curr);
                }

                if (curr >= prevr)
                {
                    st.pop();
                    if (st.empty())
                    {
                        st.push({x[i], (long double)curr});
                        // st.push({x[i], (double)maxr[i]});
                        ans[i] = st.top().r;
                        break;
                    }
                }
                else
                {
                    //
                    st.push({x[i], (long double)(curr)});

                    ans[i] = st.top().r;
                    break;
                }
            }
        }
    }
    cout << fixed << setprecision(3);
    for (auto i : ans)
    {
        cout << i << " ";
    }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB 10 numbers
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB 2 numbers
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB 505 numbers
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 340 KB 2000 numbers
# 결과 실행 시간 메모리 Grader output
1 Correct 24 ms 1228 KB 20000 numbers
# 결과 실행 시간 메모리 Grader output
1 Correct 66 ms 3056 KB 50000 numbers
2 Correct 59 ms 3100 KB 49912 numbers
# 결과 실행 시간 메모리 Grader output
1 Correct 121 ms 5056 KB 100000 numbers
# 결과 실행 시간 메모리 Grader output
1 Correct 138 ms 5988 KB 115362 numbers
2 Correct 143 ms 7136 KB 119971 numbers
# 결과 실행 시간 메모리 Grader output
1 Correct 189 ms 7536 KB 154271 numbers
2 Correct 238 ms 11712 KB 200000 numbers
# 결과 실행 시간 메모리 Grader output
1 Correct 228 ms 8872 KB 200000 numbers
2 Correct 230 ms 11832 KB 199945 numbers