Pagini recente » Cod sursa (job #1983504) | Cod sursa (job #2441978) | Cod sursa (job #1715788) | Cod sursa (job #1905508) | Cod sursa (job #208696)
Cod sursa(job #208696)
#include <stdio.h>
#include <math.h>
#define max 500001
long n, a, b, k, x, s, rest, i, w, q;
long v[max];
long ss[max], ww[max], j;
long sel[max / 4];
int main() {
freopen("divk.in", "r", stdin);
freopen("divk.out", "w", stdout);
long sol = 0;
scanf("%ld %ld %ld %ld", &n, &k, &a, &b);
for (i = 1; i <= n; ++i) {
scanf("%ld", &x);
v[i] = x % k;
}
for (i = 1; i <= a - 1; ++i) {
s += v[i];
}
s %= k;
x = 0;
for (i = a; i <= b; ++i) {
x += v[i];
x %= k;
ss[i] = x;
++sel[x];
}
/*for (i = a - 1; i <= n - 1; ++i) {
long sss = s - rest;
while (sss < 0) {
sss += k;
}
w = k - sss;
if (w == k) {
w = 0;
}
if(sel[w]) {
sol += sel[w];
}
--sel[ss[i + 1]];
if (i + b - a + 2 <= n) {
x += v[i + b - a + 2];
x %= k;
ss[i + b - a + 2] = x;
++sel[x];
}
rest += v[i + 1];
rest %= k;
s += v[i + 1];
s -= v[i - a + 2];
if (s < 0) {
s += k;
}
s %= k;
}*/
long rrr, rrq;
for (i = 1; i <= n; ++i) {
ww[i] = (ww[i - 1] + v[i]) % k;
}
sol = 0;
for (i = 1; i <= n; ++i) {
for (j = i + a; j <= i + b && j <= n + 1; ++j) {
if( (ww[j - 1] - ww[i - 1] + k) % k == 0) {
++sol;
}
}
}
rrr = sol / 1000000;
rrq = sol % 1000000;
if (rrr > 0) {
printf("%ld%ld\n", rrr, rrq);
} else {
printf("%ld\n", rrq);
}
return 0;
}