#include<cstdio>
#include<cstring>
using namespace std;
int d[100100],q[100100];
char str[100100];
double cal(int a,int b)
{
return 1.0*(d[b]-d[a])/(1.0*b-a);
}
int main()
{
int T,n,len;
scanf("%d",&T);
while(T--)
{
int t=0;
scanf("%d%d",&n,&len);
scanf("%s",str);
d[0]=0;
for(int i=1;i<=n;i++)
if(str[i-1]=='1')
d[i]=d[i-1]+1;
else
d[i]=d[i-1];
double res=-1;
int l=1,r=0,resl,resr;
for(int i=len;i<=n;i++)
{
while(l<r&&cal(q[r],i-len)<=cal(q[r-1],q[r]))
r--;
q[++r]=i-len;
while(l<r&&cal(q[l],i)<=cal(q[l+1],i))
l++;
double t=cal(q[l],i);
if(t>res)
{
res=t;
resl=q[l];
resr=i;
}
}
printf("%d %d\n",resl+1,resr);
}
}
LA 4726 斜率DP
最新推荐文章于 2021-02-26 20:17:30 发布