Pagini recente » runda/suceavaftw | Cod sursa (job #1574628) | Cod sursa (job #2738540) | Cod sursa (job #13718) | Cod sursa (job #1512314)
#include <cstdio>
#include <algorithm>
#include <deque>
#define Dim 500002
using namespace std;
int n, k, a, b, s[Dim], x;
long long Sol;
deque <int> d[Dim];
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);
s[i] = (s[i - 1] + x) % k;
d[s[i]].push_back(i);
if(i >= a)
{
while(!d[s[i]].empty() && d[s[i]].front() < i - b)
d[s[i]].pop_front();
while(!d[s[i]].empty() && i - d[s[i]].back() + 1 <= a)
{
aux.push_back(d[s[i]].back());
d[s[i]].pop_back();
}
Sol = Sol + d[s[i]].size() * 1LL;
while(!aux.empty())
{
d[s[i]].push_back(aux.front());
aux.pop_front();
}
}
}
printf("%lld", Sol);
return 0;
}