Cod sursa(job #1397656)

Utilizator AlexNiuclaeNiculae Alexandru Vlad AlexNiuclae Data 23 martie 2015 17:44:01
Problema Divk Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <cstdio>
#include <queue>
#include <algorithm>

#define Nmax 500010
#define Kmax 100000

using namespace std;

int n , k , a , b , sol , i , A , Mod;

queue < int > S[Kmax];
queue < pair < int , int > > moment;

int main()
{
    freopen("divk.in","r",stdin);
    freopen("divk.out","w",stdout);

    scanf("%d %d %d %d", &n, &k, &a, &b);

    moment.push(make_pair(a , 0));

    for (i = 1; i <= n; ++i)
    {
        while (moment.front().first == i && moment.size())
        {
            S[moment.front().second].push(i - a);
            moment.pop();
        }

        scanf("%d", &A);
        Mod = (Mod + A) % k;

        while (i - S[Mod].front() > b && S[Mod].size()) S[Mod].pop();

        sol += S[Mod].size();

        moment.push(make_pair(i + a , Mod));
    }

    printf("%d\n", sol);

    return 0;
}