void prec()
{
    ll i,j,k,l;
    for(i=1; i<INT_MAX; i*=2)
        for( j=i; j<INT_MAX; j*=3)
            for( k=j; k<INT_MAX; k*=5)
                for( l=k; l<INT_MAX; l*=7)
                    num.pb(l);
    sort(all(num));
}
int main()
{
    LL i,n,ans,k;
    while(cin>>k>>str)
    {
        cnt.pb(0);
        for(i=0; i<str.size(); i++)
        {
            if(str[i]=='1') cnt.pb(i+1);
        }
        cnt.pb(str.size()+1);
        if(k>cnt.size()-2)
        {
            pr1(0);
            continue;
        }
        ans=0;
        if(k==0)
        {
            for(i=1;i<cnt.size();i++)
            {
                n=cnt[i]-cnt[i-1]-1;
                ans+=n*(n+1)/2;
            }
        }
        else
        {
            for(i=1; i<cnt.size()-k; i++)
            {
                ans+=(cnt[i]-cnt[i-1])*(cnt[i+k]-cnt[i+k-1]);
            }
        }
        pr1(ans);
    }
    return 0;
}
Beispiel #3
0
void gen(void)
{
    LL i,j,k;
    for(i=1;i<=1005;i++) arr[i]=i*i*i;
    for(i=1; i<=1005; i++)
    {
        for(j=i+1; j<=1005; j++)
        {
            k=arr[i]+arr[j];
            mp[k]++;
            if(mp[k]==2) cont.pb(k);
        }
    }
    sort(cont.begin(),cont.end());
    return;
}
inline void sieve()
{
    iota( all(squeeze), 0 );
    mrk[0] = mrk[1] = false;
    for(int i = 2; i < ms; ++i)
    {
        if(mrk[i])
        {
            primes.pb(i);
            for(int j = i + i; j < ms; j += i)
            {
                squeeze[j] = min(squeeze[j], i);
                mrk[j] = false;
            }
        }
    }
}