Submission #1153044

#TimeUsernameProblemLanguageResultExecution timeMemory
1153044_8_8_Seesaw (JOI22_seesaw)C++20
0 / 100
1 ms524 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define double long double const int N = (int)1e6 + 10, MOD = (int)1e9 + 7, inf = (int)2e9; int n, a[N]; ll p[N]; double get(int l, int r) { return (1.0 * (p[r] - p[l - 1])) / (1.0 * (r - l + 1)); } double solve_mx(int l, int r, double mn, double mx) { while(r < n || l > 1) { if(r + 1 <= n && get(l, r + 1) <= mx) { r++; } else { if(l == 1) { return inf; } l--; } mn = min(mn, get(l, r)); } return mx - mn; } double solve_mn(int l, int r, double mn, double mx) { while(r < n || l > 1) { if(l - 1 >= 1 && get(l - 1, r) >= mn) { l--; } else { if(r == n) return inf; r++; } mx = max(mx, get(l, r)); // cout << get(l, r) << "x\n"; } return mx - mn; } void test() { cin >> n; for(int i = 1; i <= n; i++) { cin >> a[i]; p[i] = p[i - 1] + a[i]; } double res = inf; for(int i = 1; i <= n; i++) { res = min(res, solve_mn(i, i, a[i], a[i])); res = min(res, solve_mx(i, i, a[i], a[i])); if(i + 1 <= n) { res = min(res, solve_mn(i, i + 1, a[i], get(i, i + 1))); res = min(res, solve_mx(i, i + 1, a[i], get(i, i + 1))); } if(i - 1 >= 1) { res = min(res, solve_mn(i - 1, i, get(i - 1, i), a[i])); res = min(res, solve_mx(i - 1, i, get(i - 1, i), a[i])); } } cout << fixed << setprecision(10) << res << '\n'; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); int t = 1; // cin >> t; while(t--) { test(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...