CF165C Another Problem on Strings

题目描述

一个字符串被称为二进制字符串,如果它仅由字符“0”和“1”组成。 如果字符串 $v$ 是字符串 $w$ 的一个子串,则说明 $v$ 长度大于零,并且可以从 $w$ 的某个位置开始读取。比如,字符串 “010” 的子串有 6 个:“0”,“1”,“0”,“01”,“10”,“010”。如果两个子串出现的位置不同,则认为它们是不同的子串。因此,如果同一子串出现多次,需要计入出现的次数。 给定一个二进制字符串 $s$,你的任务是计算其包含恰好 $k$ 个字符“1”的子串数量。

输入格式

第一行包含一个整数 $k$($0 \leq k \leq 10^{6}$)。 第二行包含一个非空二进制字符串 $s$,$s$ 的长度不超过 $10^{6}$ 个字符。

输出格式

输出一个整数——给定字符串中包含恰好 $k$ 个字符“1”的子串数量。 请不要在 C++ 中使用 %lld 格式符来读取或输出 64 位整数。推荐使用 cin、cout 流或 %I64d 格式符。

说明/提示

在第一个样例中,满足条件的子串为:“1”,“1”,“10”,“01”,“10”,“010”。 在第二个样例中,满足条件的子串为:“101”,“0101”,“1010”,“01010”。 由 ChatGPT 5 翻译