Submission #739727

#TimeUsernameProblemLanguageResultExecution timeMemory
739727alexddSeesaw (JOI22_seesaw)C++17
34 / 100
299 ms33340 KiB
#include<bits/stdc++.h> using namespace std; //ifstream fin("seesaw.in"); //#define cin fin #define double long double vector<double> ord; int n; int a[200005]; double tot,ans=1000000000; double verif(double le)///lungimea minima daca barycentrul nu poate trece in stanga lui le { double sum = tot,mxm; int pozs=1,pozd=n; //mxm = tot/n; mxm = tot/n; for(int i=1;i<=n-1;i++) { if((sum-a[pozd])/(n-i)>=le) { sum-=a[pozd]; pozd--; } else { sum-=a[pozs]; pozs++; } mxm = max(mxm, sum/(n-i)); //cout<<fixed<<setprecision(15)<<sum/(n-i)<<"\n"; } ans = min(ans, mxm-le); return mxm-le; } signed main() { ios_base::sync_with_stdio(0);cin.tie(0); cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; tot+=a[i]; } for(int i=1;i<=n;i++) { double cv = 0; for(int j=i;j<=n;j++) { cv += a[j]; ord.push_back(cv/(j-i+1)); } } sort(ord.begin(),ord.end()); while(ord[ord.size()-1]>tot/n) ord.pop_back(); int st,dr,mij1,mij2; st=0; dr=ord.size()-1; while(dr-st+1>=1000) { mij1 = st + (dr-st+1)/3; mij2 = mij1 + (dr-st+1)/3; if(verif(ord[mij1])==verif(ord[mij2])) { while(1) st=dr; } if(verif(ord[mij1])<verif(ord[mij2])) dr=mij2; else st=mij1; } //st=0;dr=ord.size()-1; for(int i=st;i<=dr;i++) ans = min(ans, verif(ord[i])); cout<<fixed<<setprecision(15)<<ans; 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...