Cod sursa(job #1496358)

Utilizator bciobanuBogdan Ciobanu bciobanu Data 4 octombrie 2015 20:28:26
Problema Divk Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <bits/stdc++.h>

using namespace std;

const int Nmax = 500000 + 1;
const int Kmax = 100000;

int s[Nmax];
int cnt[Kmax];
long long sol;

int main()
{
    ifstream in("divk.in");
    ofstream out("divk.out");
    int n, k, minLength, maxLength;

    in >> n >> k >> minLength >> maxLength;

    s[0] = 0;
    for ( int i = 1; i <= n; i++ )
    {
        in >> s[i];
        s[i] += s[i - 1];
        s[i] -= s[i] / k * k;
    }

    for ( int i = minLength; i <= maxLength; i++ )
        ++ cnt[ s[i] ];

    for ( int i = 0; i + minLength <= n; i++ )
    {
        sol += cnt[ s[i] ];
        -- cnt[ s[i + minLength] ];
        if ( i + maxLength + 1 <= n )
            ++ cnt[ s[i + maxLength + 1] ];
    }

    out << sol << '\n';
    out.close();
    return 0;
}