二分平均值x,每个数减去x , 找区间 S[ r ]- S[l]>=0 ,r-l>=m
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int N=1e5+5;
#define inf 1e9
int n,m,a[N]; double s[N];
int chk(double md,int ok=0){
int i,k;
s[0]=0;for(i=1;i<=n;i++) s[i]=s[i-1]+a[i]-md;
double t=inf,ans=-inf;
double L=0,R=0 ;
for(i=m;i<=n;i++){
if(s[i-m]<=t){
t=s[i-m]; k=i-m+1;
}
if(s[i]-t>ans+1e-6){
L=k,R=i;
ans=s[i]-t;
}
}
if(ok){
cout<<L<<' '<<R<<endl;
}
return ans>=0;
}
signed main(){
int cas; cin>>cas;
while(cas--){
cin>>n>>m;
int i; char c;
for(i=1;i<=n;i++) cin>>c,a[i]=c-'0';
double l=0,r=1,t;
while(r-l>1e-6){
double md=(l+r)/2;
if(chk(md)) l=md; else r=md;
}
chk(l+1e-6,1);
}
}
浙公网安备 33010602011771号