165C Another Problem on Strings (字首)
題目連結:http://codeforces.com/problemset/problem/165/C點選開啟連結
C. Another Problem on Strings time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard outputA string is binary, if it consists only of characters "0" and "1".
String v is a substring
You are given a binary string s. Your task is to find the number of its substrings, containing exactly k characters "1".
InputThe first line contains the single integer k (0 ≤ k ≤ 106). The second line contains a non-empty binary string s. The length of s does not exceed 106 characters.
Output
Print the single number — the number of substrings of the given string, containing exactly k
Please do not use the %lld specifier to read or write 64-bit integers in С++. It is preferred to use the cin, cout streams or the %I64dspecifier.
Examples input1 1010output
6input
2 01010output
4input
100 01010output
0Note
In the first sample the sought substrings are: "1", "1", "10", "01", "10", "010".
In the second sample the sought substrings are: "101", "0101", "1010", "01010".
用num【i】記錄從字串首開始有i個1字串的個數
然後用字首思想計算ans值
#include <bits/stdc++.h>
using namespace std;
int num[1111111];
int main()
{
long long int ans=0;
int k;
cin >> k;
string s;
cin >> s;
num[0]=1;
int mid=0;
for(int i=0;i<s.length();i++)
{
if(s[i]=='1')
mid++;
if(mid>=k)
ans+=num[mid-k];
num[mid]++;
}
cout << ans <<endl;
}