C. Social Distance1300 / 思维 分类讨论

Posted 幽殇默

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C. Social Distance1300 / 思维 分类讨论相关的知识,希望对你有一定的参考价值。


https://codeforces.com/problemset/problem/1367/C
分为三类情况讨论:

  • 全0的情况,即没有1
  • 只有1个1的情况
  • 有多于1个1的情况.


#include<bits/stdc++.h>
using namespace std;
string s;
int t,n,k;
int main(void)
{
	cin>>t;
	while(t--)
	{
		cin>>n>>k>>s;
		vector<int>ve;
		for(int i=0;i<s.size();i++) if(s[i]=='1') ve.push_back(i);
		if(ve.size()==0)//没有1
		{
			int ans=n/(k+1);
			if(n%(k+1)) ans++;
			cout<<ans<<endl;
		}else if(ve.size()==1)//只有1个1
		{
			int l=ve[0],r=ve[0];
			int ans=0;
			while(l-k-1>=0) ans++,l=l-k-1;
			while(r+k+1<n) ans++,r=r+k+1;
			cout<<ans<<endl; 
		}else//多个1
		{
			int ans=0;
			int l=ve[0],r=ve[ve.size()-1];
			while(l-k-1>=0) ans++,l=l-k-1;//处理第一个1之前的
			while(r+k+1<n) ans++,r=r+k+1;//处理第最后一个1之后的
			for(int i=1;i<ve.size();i++)//处理俩1之间的
			{
				int l=ve[i-1],r=ve[i];
				while(r-(l+k+1)>k) ans++,l=l+k+1;
			}
			cout<<ans<<endl;
		} 
	}
	return 0;
}

以上是关于C. Social Distance1300 / 思维 分类讨论的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #650 (Div. 3) C. Social Distance (前缀和)

基于yolov5的行人检测跟踪与社交距离预测 (pedestrian detection and social distance prediction)

C. Registration system1300 / 哈希

C. Boats Competition1300 / 思维 暴力

C. Pluses and Minuses 1300 / 思维 前缀和

C. Product of Three Numbers1300 / 简单数论