Pagini recente » Cod sursa (job #746939) | Cod sursa (job #98594) | Cod sursa (job #1492245) | Cod sursa (job #143908) | Cod sursa (job #1397651)
#include <cstdio>
#include <queue>
#include <algorithm>
#define Nmax 500010
#define Kmax 100000
using namespace std;
int n , k , a , b , sol , i , Poz1 , Poz2;
int A[Nmax] , Mod[Nmax];
deque < 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)
{
S[moment.front().second].push_back(i - a);
moment.pop();
}
scanf("%d", &A[i]);
Mod[i] = (Mod[i-1] + A[i]) % k;
while (i - S[Mod[i]][0] > b && S[Mod[i]].size()) S[Mod[i]].pop_front();
sol += S[Mod[i]].size();
moment.push(make_pair(i + a , Mod[i]));
}
printf("%d\n", sol);
return 0;
}