MnZn二分求hack,玄关
查看原帖
MnZn二分求hack,玄关
469213
SugarKite楼主2024/4/3 16:58

rt

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define len (head-tail+1)
const double res=1e-5;
const int N=100050;
int a[N];
int n,s,t;
bool check(double x){
	int head=0,tail=1,sum=0;
	for(int i=1;i<=n;i++){
		sum+=a[i];
		head++;
		while((a[tail]<=x&&len>s)||len>t){
			sum-=a[tail];			
			tail++;
		}
		if(1.0*sum/len>=x&&len<=t&&len>=s)return 1;
	}
	return 0;
}
signed main(){
	cin>>n>>s>>t;
	for(int i=1;i<=n;i++)cin>>a[i];
	double l=-10010,r=10010;
	while(r-l>res){
		double mid=(l+r)/2;
		if(check(mid))l=mid;
		else r=mid;
	} 
	printf("%.3lf",l);
	return 0;
} 
2024/4/3 16:58
加载中...