Submission #1100284

#TimeUsernameProblemLanguageResultExecution timeMemory
1100284michifiedBalloons (CEOI11_bal)C++17
20 / 100
644 ms13964 KiB
#include <bits/stdc++.h> #define ll long long #define ld long double #define lid id * 2 + 1 #define rid id * 2 + 2 using namespace std; const ll mod = 1e9 + 7; ld bestR(ld x1, ld r1, ld x2, ld r2) { ld l = 0, r = r2 + 1; while (l < r - 0.0001) { ld mid = (l + r) / 2; if (sqrtl((x2 - x1) * (x2 - x1) + abs(r1 - mid) * abs(r1 - mid)) >= r1 + mid) l = mid; else r = mid - 0.0001; } return min(r2, l); } int main() { // ifstream cin("balancing.in"); // ofstream cout("balancing.out"); int n, i; cin >> n; vector<ld> x(n), r(n); for (i = 0; i < n; i++) cin >> x[i] >> r[i]; vector<ld> ans(n); stack<int> st; ans[0] = r[0]; st.push(0); for (i = 1; i < n; i++) { ld res = r[i]; while (not st.empty()) { res = min(res, bestR(x[st.top()], ans[st.top()], x[i], r[i])); if (res > ans[st.top()]) st.pop(); else break; } ans[i] = res; st.push(i); } for (i = 0; i < n; i++) cout << fixed << setprecision(3) << ans[i] << 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...