return ;
}
mid=(node[nd].left+node[nd].right)/2;
if(right<=mid) update(nd*2,left,right);
else if(left>mid) update(nd*2+1,left,right);
else
{
update(nd*2,left,mid);
update(nd*2+1,mid+1,right);
}
node[nd].num0=node[nd*2].num0+node[nd*2+1].num0;
node[nd].num1=node[nd*2].num1+node[nd*2+1].num1;
return ;
}
int main()
{
int n,k,i,j,flag,left,right,ans,num,len;
while(scanf("%d %d",&n,&k)!=EOF)
{
flag=0;ans=0;num=0;
if(!n&&!k) break;
scanf("%s",s+1);//只要输入 不用再转化进一个int数组 否则会超时 所以不必要的操作一定不要要
len=strlen(s+1);
build(1,1,len);
if(s[i]=='0') {flag=1;break;}
if(k==0)
{
if(node[1].num1==len) printf("0\n");
else
printf("-1\n");
continue;
}
if(flag==0) {printf("0\n");continue;}
int pos;//记录最左边0的位置
flag=0;
while(pos=query(1))
{
if(pos==-1) break;
left=pos;right=pos+k-1;
if(right>len) {printf("-1\n");flag=1;break;}
update(1,left,right);
ans++;
}
if(flag) continue;
else printf("%d\n",ans);
}
return 0;
}
收获: 原来一些无用的小操作也能引起超时
另外 那些红色字体 很重要 以后直接按那种方式写好了 标准