博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zzuliOJ 1895: 985的0-1串难题 【二分】
阅读量:6321 次
发布时间:2019-06-22

本文共 1326 字,大约阅读时间需要 4 分钟。

1895: 985的0-1串难题

Time Limit: 1 Sec  
Memory Limit: 128 MB
Submit: 188  
Solved: 48

Description

985有一个长度为n的0-1串,已知他最多可以修改k次(每次修改一个字符即0->1 或者 1->0),他想知道连续的全1子串最长是多少。

 

Input

第一行输入一个整数t,代表有t组测试数据。
每组数据第一行输入两个整数n,k分别代笔上面的信息。
注:1 <= t <= 12,1 <= n <= 100000,0 <= k <= 100000。

 

Output

一个整数代表可以得到的最大长度。

 

Sample Input

26 30101006 2010100

Sample Output

54

HINT

 

Source

#include 
#include
#include
#include
#define MAXN 100005using namespace std;char s[MAXN];int n, k, sum[MAXN];void init() { memset(sum, 0, sizeof(sum)); if (s[0] == '0') sum[0] = 1; for (int i = 1; i < n; i++) { if (s[i] == '0') sum[i]++; sum[i] += sum[i-1]; }}bool judge(int x){ int cnt = 0; if (sum[x-1] <= k) return true; for (int i = 0; i + x < n; i++) { if (sum[i + x] - sum[i] <= k) return true; } return false;}int main() { int t; scanf("%d", &t); while (t--) { scanf("%d%d%s", &n, &k, s); init(); int lb = 0, ub = n, ans; while (ub >= lb) { int mid = (lb + ub)>>1; if (judge(mid)) { ans = mid; lb = mid + 1; } else ub = mid - 1; } printf("%d\n", ans); } return 0;}

 

 

 

 

 

转载于:https://www.cnblogs.com/cniwoq/p/6770852.html

你可能感兴趣的文章
Javascript类型转换的规则
查看>>
vue js 判断鼠标滚动到底部 数据更新
查看>>
一个ios的各种组件、代码分类,供参考
查看>>
Shell脚本学习之sed详解
查看>>
bugDone
查看>>
Go:json(序列化、反序列化)
查看>>
Python 类的用法
查看>>
动态链接和静态链接的区别
查看>>
解决Python开发过程中依赖库打包问题的方法
查看>>
Git学习系列之命令大全(二)
查看>>
java基础(五)-----关键字static
查看>>
什么是PLI?
查看>>
[UIKit学习]04.关于HUD提示框,定时任务、开发关于资源常见问题
查看>>
文摘:OUTER JOIN
查看>>
http://git.oschina.net/chunanyong/springrain
查看>>
(转)Android中的Shape使用总结
查看>>
解决stackoverflow打开慢不能注册登录
查看>>
谈谈newDate()的简单使用 JS
查看>>
django-1-新手如何使用django
查看>>
Linq 基础
查看>>