0
已解决
乔俊驰
资深守护
资深守护
#include<iostream>
using namespace std;
int n,k;
char a[500005];
bool check(int mid){
int cnt=0,i=0;
while(i<=n){
i++;
if(a[i]=='1'){
i+=k-1;
cnt++;
}
}
return cnt<=mid;
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int l=1,r=n;
while(l<r){
int mid=(l+r)/2;
if(check(mid)) r=mid;
else l=mid+1;
}
cout<<l;
return 0;
}
哪错了
0
已采纳
刘英杰
新手天翼
新手天翼
1、二分有错误,应把l的初值改为0(因为可能整个数列没有1)
(以下均在check函数中)
2、一个字符串,最后一项应该是a[n-1],但你的查找写的是i<=n,这会导致判断出问题,应把i<=n改为i<n
3、i只有在没有地鼠的时候需要累加,应替换i++的位置,在if后面用else引导i++
4、mid是要判断的长度,而k是可以拍的次数,二者被你搞反了。修改:为什么要i+=k-1呢?
i+=mid他不香吗?
5、(上接4)还应该把下面判断的cnt<=mid改为cnt<=k
望采纳
刘英杰在2021-05-22 22:28:51追加了内容
对不起,我看错了,请无视第二项
0
汪宇航
新手启示者
新手启示者
0
0
0