zoukankan      html  css  js  c++  java
  • POJ 2018

    牛的数量<=1e5,字段长度在1和1e5之间,所以如果枚举所有字段的话最坏情况会超,所以这里我们考虑其他方法,因为同一个圈子里牛的最大数量是2000,所以最多有1e5*2000=2e8,又显然答案是有单调性的,二分的话复杂度在log(2e8)

    #include <bits/stdc++.h>
    using namespace std;
    #define ll long long
    bool bok[1000];
    const int maxn=1e5+90;
    double a[maxn],b[maxn],sum[maxn];int main(){
    ios::sync_with_stdio(false); int n,f;
    cin>>n>>f;
    double l=-1e6,r=1e6,eps=1e-5;
    for(int i=1;i<=n;i++) {
    cin >> a[i];
    }
    while (r-l>eps){//最后输出*1000整数所以只要保证0.001位准确,这里精确到0.000001
    double mid=(l+r)/2.0;
    for(int i=1;i<=n;i++)b[i]=a[i]-mid;(将二分转化为判定条件)
    for(int i=1;i<=n;i++)sum[i]=b[i]+sum[i-1];(如果sum<0则小于平均值,否则大于等于平均值)
    double minn=1e10,ans=-1e10;
    for(int i=f;i<=n;i++){
    minn=min(minn,sum[i-f]);(注意每次改变i,sum[f~i]只多了个sum[i],每次循环只要添加一个sum[i]
    ans=max(ans,sum[i]-minn);(找出最大的字段)
    }
    if(ans>=0)l=mid;//如果ans大于等于平均值,则解大于等于mid
    else r=mid;//否则解比平均值小
    }
    cout<<(ll)(r*1000)<<endl;
    return 0;
    }
  • 相关阅读:
    SVN 常用keywords 记录
    HTML5新特性介绍
    php文件上传错误代码
    MySQL的 Grant命令权限分配
    前端开发工具整理
    Java多线程编程经验谈
    一套密码强度判断方案
    傲游浏览器下Flash和Js交互问题
    在xml中使用&和字符
    ibatis和myibatis
  • 原文地址:https://www.cnblogs.com/ilikeeatfish/p/12234253.html
Copyright © 2011-2022 走看看