ZOJ -4130 Turn It Off

news/2024/11/2 2:37:02/

题目描述:

It's already 21:30 now, and it's time for BaoBao to go to bed. To ensure his sleeping quality, BaoBao decides to turn all the lights in his bedroom off.

There are n lights, numbered from 1 to n, arranged in a row in BaoBao's bedroom. Each time BaoBao can select an integer i and turn all the lights numbered from i to (i+L−1) (both inclusive) off, where L is a predefined positive integer. Note that each time the value of L must be the same.

Given the initial status of all the lights, please help BaoBao determine the smallest possible L so that he can turn all the lights off within k times.

Input

There are multiple test cases. The first line of the input contains an integer T, indicating the number of test cases. For each test case:

The first line contains two integers n and k (1≤k≤n≤2×105).

The second line contains a string s (|s| = n s∈{’0’,’1’}) indicating the initial status of the lights. Let s[1] ​ be the i-th character in s, if  s[i]​=’1’ then the i-th light is initially on, otherwise it's initially off. It's guaranteed that there is at least one '1' in s.

It's guaranteed that the sum of n of all test cases will not exceed 2×1e6.

Output

For each test case output one line containing one integer, indicating the smallest possible L.

Sample

Input

2
10 4
0101011111
3 1
010

Output

3
1

Time limit

1000 ms

Mem limit

65536 kB

OS

Linux

Author

CHEN, Jingbang

Spoilers

Hide

题目大意:给你一个字符串s,让你在k次操作内将字符串内所有的1变成0,每次操作会使[i,i+L-1]内的1变成0,我们要求最小的L

思路分析:通过二分搜索可能的L取值,最后会得到一个L的取值区间,所以结果就是区间的左端点,具体见代码。

代码:

#include<iostream>
using namespace std;
int main() {int t;cin>>t;while(t--){int n, k;scanf("%d%d", &n, &k);string a;cin >> a;int l=1,r=n;//L可能的取值在[1,n] while(l<r){int mid=(l+r)/2;int ans=0;for(int i=0;i<n;i++){if(a[i]=='0')continue;//如果a[i]为1,我们就进行一次操作,使得[i,i+mid-1]区间范围内的1全部变成0 i=i+mid-1;//跳过已经处理的范围 ans++;//操作次数+1 }if(ans<=k)//操作次数满足条件,去找更小的L {r=mid;}elsel=mid+1;}cout<<l<<endl;}
}

有用的英文单词:both inclusive 都包括在内  initial 最初的


http://www.ppmy.cn/news/221950.html

相关文章

“同档位无对手”的荣耀90系列,有哪些厉害的能力?

5 月 29 日&#xff0c;荣耀90系列正式发布。该系列包括荣耀90 Pro与荣耀90两款机型。 这两款机型都有哪些厉害的能力&#xff1f; 一、赵明&#xff1a;荣耀90系列“同档位无对手” 发布会在天府之国的成都市举行&#xff0c;这个以时尚和美食著称的城市&#xff0c;近年来…

P4130或JZOJ 1214. 【NOI2007】项链工厂

D e s c r i p t i o n Description Description 写一种数据结构&#xff0c;支持区间染色&#xff0c;区间翻转&#xff0c;区间旋转&#xff0c;区间查询颜色&#xff0c;单点修改颜色 对 于 100 % 的 数 据 &#xff0c; N ≤ 500000 &#xff0c; Q ≤ 500000 &#xff0…

P4130,jzoj1214-[NOI2007]项链工厂【线段树】

正题 题目链接:https://www.luogu.org/problemnew/show/P4130 题目大意 一个环形颜色珠子链&#xff0c;位置(注意不是上面的珠子)从最上顺时针下来位置依次标号 1 ∼ n 1\sim n 1∼n。 然后要求支持以下操作 R k : R\ k: R k:将所有珠子顺时针旋转 k k k个。 F : F: F:将所…

intel 从CPU上怎么看几代

比如现在的处理器&#xff0c;i系列&#xff0c;i3&#xff0c;i5&#xff0c;或i7&#xff0c;用i3举例&#xff0c;第一代是i3 1530&#xff0c;这里把1代省了&#xff0c;所以是i3 530。二代比如i3 2100&#xff0c;三代i3 3220&#xff0c;四代i3 4130&#xff0c;就是从i3…

图解LeetCode——114. 二叉树展开为链表

一、题目 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺序相同。 二…

PDF怎么转换成WORD?分享这几个方法给大家!

PDF怎么转换成Word&#xff1f;在我们的工作过程中&#xff0c;经常会使用到PDF文件、Word文件等等。而在很多时候&#xff0c;需要根据工作需求&#xff0c;将各种文件进行格式转换&#xff0c;例如将PDF文件转换成Word格式&#xff0c;从而满足我们对文件进行编辑、更改等需求…

3.完成ODS层数据采集操作

将原始数据导入mysql 1 选中mysql 运行脚本 2 验证结果 数据存储格式和压缩方案 存储格式 分类 1.行式存储(textFile) 缺点:可读性较好 执行 select * 效率比较高 缺点:耗费磁盘资源 执行 select 字段 效率比较低 2.列式存储(orc) 优点:节省磁盘空间. 执行 select 字段…