题意:一个饭店的桌子是呈线性排列的(即排成一条直线),每个客人之间至少需要间隔k张桌子,现在共有n张桌子,给定一个10字符串,1表示这个位置此刻有客人,问还能再插入几个客人。
题解:计算当前每个客人之间的间隔,判断两个人之间能否再插入一个。注意如果目前没有客人,从第一张桌子开始坐能坐下最多的客人。
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
#define INF 0x3f3f3f3f
const int N=2e6+50;
ll n,m;
map<int,int>mp;
int cmmp(int a,int b)
{
return a>b;
}
int gcd(int a,int b)
{
return b?gcd(b,a%b):a;
}
int lcm(int a,int b)
{
return a*b/gcd(a,b);
}
int main()
{
ll t,k;
string s;
cin>>t;
while(t--)
{
cin>>n>>k;
cin>>s;
ll ans=0;
int cnt=0,flag=0;
for(int i=0;i<n;i++)
{
if(s[i]=='0')
cnt++;
if(cnt==k+1)
{
ans++;
cnt=0;
}
if(s[i]=='1')
{
if(cnt<k&&flag)
ans--;
flag=1;
cnt=0;
}
}
if(!flag)
cout<<1+(n-1)/(k+1)<<endl;
else
cout<<ans<<endl;
}
return 0;
}