Pagini recente » Cod sursa (job #2346113) | Cod sursa (job #313253) | Cod sursa (job #3142984) | Cod sursa (job #114962) | Cod sursa (job #1512329)
#include <cstdio>
#include <algorithm>
#include <deque>
#define Dim 500002
using namespace std;
int n, k, a, b, x, s1, s2;
long long Sol;
deque <int> d[Dim/2];
deque <int> aux;
int main()
{
int i;
freopen("divk.in", "r", stdin);
freopen("divk.out", "w", stdout);
scanf("%d %d %d %d", &n, &k, &a, &b);
d[0].push_back(0);
for(i = 1; i <= n; ++ i)
{
scanf("%d", &x);
s2 = (s1 + x) % k;
d[s2].push_back(i);
if(i >= a)
{
while(!d[s2].empty() && d[s2].front() < i - b)
d[s2].pop_front();
while(!d[s2].empty() && i - d[s2].back() + 1 <= a)
{
aux.push_back(d[s2].back());
d[s2].pop_back();
}
Sol = Sol + d[s2].size() * 1LL;
while(!aux.empty())
{
d[s2].push_back(aux.front());
aux.pop_front();
}
}
s1 = s2;
}
printf("%lld", Sol);
return 0;
}