上海计算机学会2022年6月月赛C++丙组T4连续的零

题目描述

给定一个 01 序列 b1​b2​...bn​,01 的意思就是这个数列里只有 01

请问最少需要将多少个 1 改成 0,序列里会出现至少 k 个连续的 0

输入格式
  • 第一行:两个整数 n 与 k。
  • 第二行:n 个字符表示 b1b2...bn,保证只出现 01
输出格式

单个整数:最少要改多少个 1,才会出现 k 个连续的 0

数据范围
  • 对于 30%30% 的数据,1≤k≤n≤20;
  • 对于 60%60% 的数据,1≤k≤n≤2000;
  • 对于 100%100% 的数据,1≤k≤n≤500,000
样例数据

输入:

6 3

101010

输出:

1

说明:

改最后一个1

输入:

5 5

00100

输出:

1

题解:

本题关键点:滑动窗口法来解。代码如下。

cpp 复制代码
#include <iostream>
using namespace std;
int  main(){
	string s;	
	int size=0;
	int n, k;
	cin >> n >> k;
	cin >> s;
	int ans=n;
	for(int left=0,right=0;right<n;right++){
		//进窗口
		if(s[right]=='1') size++;
		if(right-left==k){
			//出窗口
			if(s[left]=='1') size--;
			left++;
		}
		if(right>=k-1){
			ans=min(ans,size);
		}	
	}
	cout<<ans<<endl;
	return 0;
}
相关推荐
CoovallyAIHub4 小时前
181小时视频丢给GPT-5,准确率只有15%——南大联合NVIDIA等五校发布多模态终身理解数据集
深度学习·算法·计算机视觉
CoovallyAIHub4 小时前
CVPR 2026 | GS-CLIP:3D几何先验+双流视觉融合,零样本工业缺陷检测新SOTA,四大3D工业数据集全面领先!
深度学习·算法·计算机视觉
xlp666hub5 小时前
Leetcode 第三题:用C++解决最长连续序列
c++·leetcode
会员源码网6 小时前
构造函数抛出异常:C++对象部分初始化的陷阱与应对策略
c++
有意义7 小时前
深度拆解分割等和子集:一维DP数组与倒序遍历的本质
前端·算法·面试
xlp666hub8 小时前
Leetcode第二题:用 C++ 解决字母异位词分组
c++·leetcode
用户726876103378 小时前
解放双手的健身助手:基于 Rokid AR 眼镜的运动计时应用
算法
Wect8 小时前
LeetCode 17. 电话号码的字母组合:回溯算法入门实战
前端·算法·typescript
不想写代码的星星9 小时前
static 关键字:从 C 到 C++,一篇文章彻底搞懂它的“七十二变”
c++
xlp666hub1 天前
Leetcode第一题:用C++解决两数之和问题
c++·leetcode