题目描述
给定一个 01
序列 b1b2…bn,01
的意思就是这个数列里只有 0
与 1
。
请问最少需要将多少个 1
改成 0
,序列里会出现至少 k 个连续的 0
。
输入格式
- 第一行:两个整数 n 与 k。
- 第二行:n 个字符表示 b1b2…bn,保证只出现
0
与1
。
输出格式
单个整数:最少要改多少个 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
题解:
本题关键点:滑动窗口法来解。代码如下。
#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;
}