Submission #678270

#TimeUsernameProblemLanguageResultExecution timeMemory
678270CodePlatinaSeesaw (JOI22_seesaw)C++17
100 / 100
60 ms10848 KiB
#include <iostream> #include <vector> #include <algorithm> #include <string> #include <tuple> #include <iomanip> #define pii pair<int, int> #define pll pair<long long, long long> #define piii pair<int, pii> #define plll pair<long long, pll> #define tiii tuple<int, int, int> #define tiiii tuple<int, int, int, int> #define ff first #define ss second #define ee ss.ff #define rr ss.ss const int INF = (int)1e9 + 7; using namespace std; struct frac { long long u, d; bool operator<(frac ot) const { return (__int128)u * ot.d < (__int128)ot.u * d; } operator long double() { return (long double)u / d; } }; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; int A[n]; for(auto &i : A) cin >> i; long long ps[n + 1]{}; for(int i = 1; i <= n; ++i) ps[i] = ps[i - 1] + A[i - 1]; pair<frac, frac> B[n]; B[0] = { {ps[n], n}, {ps[n], n} }; for(int i = 1; i < n; ++i) { int s = 0, e = i; while(s + 1 < e) { int mid = s + e >> 1; if(frac{ps[n - i + mid] - ps[mid], n - i} < frac{ps[n], n}) s = mid; else e = mid; } B[i] = { frac{ps[n - i + s] - ps[s], n - i}, frac{ps[n - i + s + 1] - ps[s + 1], n - i} }; } sort(B, B + n); frac r = B[n - 1].ff; long double ans = r - B[0].ff; for(int i = 0; i < n - 1; ++i) { r = max(r, B[i].ss); ans = min(ans, r - B[i + 1].ff); } r = max(r, B[n - 1].ss); ans = min(ans, r - B[n - 1].ff); cout << fixed << setprecision(20) << ans; }

Compilation message (stderr)

seesaw.cpp: In function 'int main()':
seesaw.cpp:47:25: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   47 |             int mid = s + e >> 1;
      |                       ~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...