zoukankan      html  css  js  c++  java
  • luogu1419 寻找段落

    题目

    luogu1419

    代码

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <algorithm>
    #include <cstring>
    #include <cmath>
    #define N 100005
    #define inf 1000000000
    #define ll long long
    using namespace std;
    
    int n,s,t,a[N];
    double sum[N];
    
    int q[N];//q纪录起始位置
    bool check(double x)
    {
    	//将原序列全部减去平均值,sum记录前缀和 
    	for(int i=1;i<=n;i++) sum[i]=(double)sum[i-1]+a[i]-x;
    	int head=1,tail=0;
    	for(int i=s;i<=n;i++)
    	{
    		while(tail>=head&&i-t+1>q[head]) head++;//若区间长度大于t,将起始点删去 
    		while(tail>=head&&sum[i]-sum[i-s]>sum[i]-sum[q[tail]-1]) tail--;//若之前存在的起始点比新加入的起始点更优,删除新加入的点 
    		q[++tail]=i-s+1;//添加起始点 
    		if(sum[i]-sum[q[head]-1]>=0) return true;
    	}
    	return false;
    }
    
    int main()
    {
    	scanf("%d%d%d",&n,&s,&t);
    	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    	double l=-10000,r=10000,mid,ans;//二分段落最大平均值
    	while(l+1e-5<r)
    	{
    		mid=(l+r)/2;
    		if(check(mid)) ans=mid,l=mid+1e-5;
    		else r=mid;
    	} 
    	printf("%.3lf",ans);
    	return 0;
    }
  • 相关阅读:
    Js实现页面跳转的几种方式
    android给View设置上下左右边框
    mac下安装tomcat
    Series.str方法
    loc() iloc() at() iat()函数
    sudo: pip:找不到命令
    杀死进程方法
    unique()与nunique()
    object数据类型
    set_index()与reset_index()函数
  • 原文地址:https://www.cnblogs.com/XYZinc/p/7640883.html
Copyright © 2011-2022 走看看