Stop Counting!
Stop Counting!
https://ac.nowcoder.com/acm/contest/13168/J
将每个点依次作为边界,对每个点操作:要么全删左边,要么全删右边,寻最大值,以此求解(具体见代码)
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int const N=1e6+7;
int n;
ll a[N],b[N],c[N]; //b是前缀和 //c是后缀和
double ans,z1,z2;
int main(){
cin >> n;
for(int i=1;i<=n;++i){
cin >> a[i];
b[i]=a[i]+b[i-1];
}
for(int i=n;i>=1;--i){
c[i]=a[i]+c[i+1];
}
for(int i=1;i<=n;++i){
z1= (double) b[i]/i;
z2= (double) c[i]/(n-i+1);
ans=max(ans,max(z1,z2));
}
printf("%.10lf",ans);
return 0;
}
查看25道真题和解析

