제출 #1127400

#제출 시각아이디문제언어결과실행 시간메모리
1127400vladiliusSeesaw (JOI22_seesaw)C++20
0 / 100
0 ms324 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using pii = pair<int, int>; using pdi = pair<double, int>; #define pb push_back #define ff first #define ss second int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; vector<int> a(n + 1); vector<ll> p(n + 1); for (int i = 1; i <= n; i++){ cin>>a[i]; p[i] = p[i - 1] + a[i]; } auto get = [&](int l, int r){ return 1.0 * (p[r] - p[l - 1]) / (r - l + 1); }; double A = get(1, n); vector<pii> all = {{1, n}}; int l = 1, r = n, dx = 1, dy = 0; while (l < r){ l += dx; r -= dy; if (get(l, r) > A){ swap(dx, dy); } all.pb({l, r}); } l = 1; r = n; dx = 0; dy = 1; while (l < r){ l += dx; r -= dy; if (get(l, r) > A){ swap(dx, dy); } all.pb({l, r}); } auto cmp = [&](pii x, pii y){ return get(x.ff, x.ss) < get(y.ff, y.ss); }; sort(all.begin(), all.end(), cmp); auto d = [&](int i){ return get(all[i].ff, all[i].ss); }; vector<int> f(n); int j = 0, cnt = 0; double out = 1e9 + 1; for (int i = 0; i < all.size(); i++){ while (cnt < n && j < all.size()){ int k = all[j].ss - all[j].ff; if (!f[k]) cnt++; f[k]++; j++; } if (cnt == n) out = min(out, d(j - 1) - d(i)); int k = all[i].ss - all[i].ff; f[k]--; if (!f[k]) cnt--; } cout<<fixed<<setprecision(12)<<out<<"\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...