题意:
在一个线性长度为n的地图里面,有a条船,每条船长度为b ,已经被探查的区域有c个。
现在问你最少需要探查几次才一定可以探查到船,
题解:
很明显,船有一定的长度,在该长度的任何一个地方探查都可以探查到船,所以我们最优的方案当然是每隔船长度-1探查一次,每次check一下,
当剩余空格只能存在a条船的时候,输出已经探查过的地方即可。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=2e5+10;
ll n,a,b,k;
char s[maxn];
vector<int>ans;
int main(){
scanf("%lld %lld %lld %lld",&n,&a,&b,&k);
scanf("%s",s);
int i,j;
int f=0,ss=0,cnt=0;
for(i=0;i<n;++i){
if(s[i]=='0'){
f=0;
for(;i<n&&s[i]=='0';++i)
f++;
cnt+=f/b;
}
}f=0;
for(i=0;i<n;++i){
if(s[i]=='0'){
int q=0;
for(;i<n&&s[i]=='0';++i){
q++;
if(q%b==0){
ss++;
ans.push_back(i+1);
cnt--;
if(cnt<a) f=1;break;
}
}
if(f) break;
}
}
printf("%d\n",ss);
for(int i=0;i<ans.size();++i)
printf("%d ",ans[i]);
return 0;
}