概述
题意:有n个房间,现在有k只牛和你来住,其中0代表空闲,1代表已经有人了,求大家相距的距离的最大值要最小。
思路:最值最小或者最大问题,显然二分答案,然后直接暴力check即可
#include <cstdio>
#include <queue>
#include <cstring>
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <map>
#include <string>
#include <set>
#include <ctime>
#include <cmath>
#include <cctype>
using namespace std;
#define maxn 100001
#define LL long long
int cas=1,T;
int n,k;
char s[maxn];
int sum[maxn];
bool check(int m)
{
for (int i = 1;i<=n;i++)
{
if (s[i]=='1')
continue;
int l = max(i-m,1);
int r = min(i+m,n);
if (sum[r]-sum[l-1]-1>=k)return true;
}
return false;
}
int main()
{
scanf("%d%d",&n,&k);
scanf("%s",s+1);
for (int i = 1;i<=n;i++)
{
sum[i]=sum[i-1];
if (s[i]=='0')
sum[i]++;
}
int l = 0,r=n,ans=0;
while (l<=r)
{
int m = (l+r)/2;
if (check(m))
r=m-1,ans=m;
else
l=m+1;
}
printf("%dn",ans);
//freopen("in","r",stdin);
//scanf("%d",&T);
//printf("time=%.3lf",(double)clock()/CLOCKS_PER_SEC);
return 0;
}
最后
以上就是务实钢笔为你收集整理的CodeForces 645C Enduring Exodus的全部内容,希望文章能够帮你解决CodeForces 645C Enduring Exodus所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复