2021.8.9提高B组模拟1T3 平均数(二分)(贪心)
Posted SSL_LKJ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021.8.9提高B组模拟1T3 平均数(二分)(贪心)相关的知识,希望对你有一定的参考价值。
平均数
题目大意
输入样例
1.
4 1
1 2 3 4
2.
4 2
2 4 3 4
3.
6 3
7 1 2 1 3 6
输出样例
1.
4.000000
2.
3.666666
3.
3.333333
题目数据
解题思路
这题就是二分求出答案mid(平均值)
a数组分别减去mid,并求前缀和
如果 某一段长度>k 的子序列和>=0,则说明这个mid合法,增大 l
AC代码
#include<iostream>
#include<cstdio>
using namespace std;
int n,k;
double l,r,mid,a[300005],f[300005];
bool check(double mid)//判断是否合法
double x=0.0;
f[0]=0.0;
for(int i=1;i<=n;i++)//求前缀和
f[i]=f[i-1]+a[i]-mid*1.0;
for(int i=k;i<=n;i++)
if(f[i]-x>=0.0)return true;
x=min(x,f[i-k+1]);
return false;
int main()
freopen("average.in","r",stdin);
freopen("average.out","w",stdout);
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
scanf("%lf",&a[i]);
r=1.0*max(a[i],r);
l=1.0;
while(l+0.000001<r)//二分
double mid=(l+r)/2;
if(check(mid))l=mid;
else r=mid-0.000001;
printf("%0.6lf",l);
return 0;
谢谢
以上是关于2021.8.9提高B组模拟1T3 平均数(二分)(贪心)的主要内容,如果未能解决你的问题,请参考以下文章
2021.7.12提高B组模拟1T3 最长公共子串(记忆化搜索)
2021.8.9提高B组模拟1T1 最长公共回文子序列(dfs)