原神波动
Tunjiang是一位原神的忠实玩家,他非常喜欢纳西妲,于是在他刚抽到纳西妲的时候就很兴奋的使用她
去爬山,但是宿舍的网太差了,在他爬到一半的时候网络总会出现波动。
一旦掉线,Tunjiang就会从山上掉下来,于是他决定使用自己的流量去支撑自己玩原神;我们把他的游
戏时间分为n个时刻,对于每个时刻来说,如果这个时刻的网络是正常的,那么他就会爬一次,如果网
络发生了波动,那么他就会直接掉下山(或者在山底无法执行爬山的行为),他需要连续爬 次才能成
功的爬上山;Tunjiang可以在任意时刻将网切换成自己的流量,我们将切换网络使用的时间忽略不计,
并且假设他每个时刻使用流量玩原神的花费是一样的,由于月底Tunjiang的流量已经用超了,所以他拜
托你帮他算一下至少需要多少流量,他才能成功爬上山。
输入格式
第1行2两个正整数 ,表示有n个时刻,以及Tunjiang需要至少连续执行k次爬山的操作才能爬上山。
第2行包括一个仅由01构成的且长度为n的字符串s,s[i]表示第i个时刻的网络状态,0表示这个时刻网络发生波动,1表示这个时刻网络正常。
输出格式
一个整数ans,表示Tunjiang至少需要使用ans个时刻的流量才能爬上山。
数据范围
1<=k<=n<=5*10^5
输入样例1
6 3
101010
输出样例1
1
输入样例2
5 5
00100
输出样例2
4
解释
第一个样例中,我们在第一个为0的时刻开流量即可,所以至少需要使用 1个时刻的流量;
第二个样例中,我们需要在所有0的时刻开流量,所以答案为4。
提示:滑动窗口
#include<stdio.h>
#include<string.h>
void main() {
int n, k, t, min;
char s[500000];
scanf("%d%d", &n,&k);
gets(s);
min = k;
for (int i = 0; i <= n - k; i++)
{
t = 0; //记录0的个数
for (int j = i; j < i + k; j++)
{
if (s[j] == 0)
t++;
}
if (t < min)
min = t; //记录所需最少流量
}
printf("%d", min);
}