上海计算机学会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;
}
相关推荐
Navigator_Z2 小时前
LeetCode //C - 1089. Duplicate Zeros
c语言·算法·leetcode
cany10002 小时前
C++ -- 可变参数模板
c++
不会C语言的男孩3 小时前
C++ Primer 第2章:变量和基本类型
开发语言·c++
云泽8084 小时前
C++ 可调用对象通关指南:深度解析 Lambda 表达式、function 包装器与 bind 绑定器
开发语言·c++·算法
wlsh155 小时前
Go 迭代器
算法
Tri_Function5 小时前
简单图论大学习
c++
语戚5 小时前
力扣 3161. 块放置查询:线段树解法(Java 实现)
java·算法·leetcode·面试·线段树·力扣·
lqqjuly5 小时前
C++ 完整知识体系—从基础语法到现代 C++23 的系统性总结
c++·c++23
CS创新实验室6 小时前
从顺序表到动态数组:数据结构的永恒基石与现代语言的优雅封装
数据结构·算法
王老师青少年编程6 小时前
信奥赛C++提高组csp-s之FHQ Treap
c++·csp·平衡树·信奥赛·csp-s·提高组·fhq treap