题意:

给你一个序列,0表示空,1表示非空

你需要填k+1个位置,然后找出某一点到其他所有点都是最近的,然后输出一个最近的情况的最远点。

思路:

哎,好菜哦。。。不会写这个二分。。。

遍历每个可取的位置,以区间>=k+1为判断条件,然后二分整个区间,逐渐逼近这个距离。。。

好菜啊,代码借鉴某巨巨…也是吃到苦头了…要多写些了…

#include<iostream>
#include<cstdio>
#include<map>
#include<set>
#include<string>
#include<queue>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define eps 1e-8
typedef __int64 LL; /*
以一个判断条件进行判断条件,即区间和>=k+1; */ const int N=1e5+10;
const int INF=1e5+10;
char s[N];
int sum[N];
int ans;
int n,k; //其实最近的话,可想而知这个FJ在比较中间的
bool Judge(int pos,int len)
{
int L=max(1,pos-len);
int R=min(n,pos+len);
return (sum[R]-sum[L-1])>=(k+1);
} int solve(int pos)
{
int s=1,t=n;
while(s<=t)
{
int mid=(s+t)/2;
if(Judge(pos,mid))//以某个位置,满足区间和>=k+1,然后逐步逼近这个mid
{
ans=mid;
t=mid-1;
}
else
s=mid+1;
}
return ans;
} int main()
{
scanf("%d%d",&n,&k);
scanf("%s",s+1);
memset(sum,0,sizeof(sum));
for(int i=1;i<=n;i++)
{
if(s[i]=='0')
sum[i]=sum[i-1]+1;
else
sum[i]=sum[i-1];
}
int ans=INF;
for(int i=1;i<=n;i++)
{
if(s[i]=='1') continue;
ans=min(ans,solve(i));
}
printf("%d\n",ans);
return 0;
}

Codeforces645C【二分】的更多相关文章

  1. BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 8748  Solved: 3835[Submi ...

  2. BZOJ 2756: [SCOI2012]奇怪的游戏 [最大流 二分]

    2756: [SCOI2012]奇怪的游戏 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 3352  Solved: 919[Submit][Stat ...

  3. 整体二分QAQ

    POJ 2104 K-th Number 时空隧道 题意: 给出一个序列,每次查询区间第k小 分析: 整体二分入门题? 代码: #include<algorithm> #include&l ...

  4. [bzoj2653][middle] (二分 + 主席树)

    Description 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整. 给你一个长度为n的序列s. 回答Q个这样的询问:s的左端点在[a,b ...

  5. [LeetCode] Closest Binary Search Tree Value II 最近的二分搜索树的值之二

    Given a non-empty binary search tree and a target value, find k values in the BST that are closest t ...

  6. [LeetCode] Closest Binary Search Tree Value 最近的二分搜索树的值

    Given a non-empty binary search tree and a target value, find the value in the BST that is closest t ...

  7. jvascript 顺序查找和二分查找法

    第一种:顺序查找法 中心思想:和数组中的值逐个比对! /* * 参数说明: * array:传入数组 * findVal:传入需要查找的数 */ function Orderseach(array,f ...

  8. BZOJ 1305: [CQOI2009]dance跳舞 二分+最大流

    1305: [CQOI2009]dance跳舞 Description 一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲 ...

  9. BZOJ 3110 [Zjoi2013]K大数查询 ——整体二分

    [题目分析] 整体二分显而易见. 自己YY了一下用树状数组区间修改,区间查询的操作. 又因为一个字母调了一下午. 貌似树状数组并不需要清空,可以用一个指针来维护,可以少一个log 懒得写了. [代码] ...

随机推荐

  1. 转: NetBean远程开发的格式与过程

    1. 介绍远程3种模式 https://netbeans.org/kb/docs/cnd/remote-modes.html 评注:英文的,3种模式讲的非常到位.服务器开发还是全远程比较不错.

  2. BeagleBone Black Industrial 进阶设置(性能优化以及延长板载eMMC存储寿命)

    前言 原创文章,转载引用务必注明链接.水平有限,欢迎指正. 本文使用markdown写成,为获得更好的阅读体验,推荐访问我的博客原文: http://www.omoikane.cn/2016/09/1 ...

  3. HDOJ How many ways?? 2157【矩阵高速幂】

    How many ways? ? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  4. Pycharm下运行程序查看每个变量的值的方法(类似于Spyder和MATLAB)

    昨天,用了大量篇幅讲了Spyder的各种问题,之所以要用Spyder,最重要的一个原因就是能够非常方便的查看中间变量的值.类似MATLAB的工作空间,非常方便.如下图所示: 但是Spyder的代码自动 ...

  5. Redis HyperLogLog及应用

    参考:http://www.runoob.com/redis/redis-hyperloglog.html Redis 在 2.8.9 之后的版本中,添加了 HyperLogLog 结构,用来做基数统 ...

  6. Android开发之中的一个个简单的通讯录实现(源代码)

    通讯录就是一个ListView.我们须要通过数据库和ContentProvider来活动通讯录的数据.当然,我们应该提供选中后编辑的功能. 非常easy的一个通讯略Demo,所以.直接上代码,须要的看 ...

  7. 尝试使用UISearchDisplayController及对苹果对控件封装习惯的理解

    本文转载至 http://blog.sina.com.cn/s/blog_74e9d98d01019vji.html   在之前做过的应用中,很多都有“搜索”这个功能,大部分情况下我都是只采用UISe ...

  8. 新装Linux系统没有网卡驱动的解决办法和步骤

    Linux下查看网卡驱动和版本信息 - CSDN博客 https://blog.csdn.net/guyan1101/article/details/72770424/ 检查网卡是否加载 - Linu ...

  9. 自己写的canvas 手写画板

    <!DOCTYPE html> <html> <head> <title>canvas</title> <meta charset=& ...

  10. ros使用时的注意事项&技巧2

    1.查看参数列表 rosparam list 2.查询参数rosparam get parameter_name,如rosparam get /rosdistro 3.设置参数rosparam set ...