社区讨论
二分返回值
P1404平均数参与者 3已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mhj34p1d
- 此快照首次捕获于
- 2025/11/03 19:57 4 个月前
- 此快照最后确认于
- 2025/11/03 19:57 4 个月前
CPP
#include<iostream>
using namespace std;
const int N=100100;
const double INF=2000,EPS=0.00001;
int n,m;
double l=INF,r,mid,a[N],s[N];
bool check(double x)
{
double minn=0;
for(int i=1; i<=n; ++i)
{
s[i]=s[i-1]+a[i]-x;
if(i>=m)
{
minn=min(minn,s[i-m]);
if(s[i]>=minn)return true;
}
}
return false;
}
double binary_search()
{
l-=EPS;
r+=EPS;
while(l+EPS<r)
{
mid=(l+r)/2;
if(check(mid))l=mid;
else r=mid;
}
return r;
}
signed main()
{
cin>>n>>m;
for(int i=1,temp; i<=n; ++i)
{
cin>>a[i];
s[i]=s[i-1]+a[i];
if(l>a[i])l=a[i];
if(r<a[i])r=a[i];
}
cout<<int(binary_search()*1000.0)<<'\n';
return 0;
}
为什么返回 ?
左侧是满足 的区间,而右侧是不满足的区间
不应该去左侧满足 区间的最右端 吗?
回复
共 4 条回复,欢迎继续交流。
正在加载回复...