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 翻译