Pagini recente » Cod sursa (job #435667) | Cod sursa (job #1888548) | Cod sursa (job #2251545) | Cod sursa (job #2637607) | Cod sursa (job #1497483)
#include <stdio.h>
int v[500005], N, A, B, K, maxlen, sol;
int *len; //keeps length of sums
long long *s; //actual sums
void readInit (void) {
scanf("%d %d %d %d", &N, &K, &A, &B);
for (int i = 1; i <= N; ++i) {
scanf("%d", &v[i]);
}
s = new long long [B - A + 1]();
len = new int [B - A + 1];
for (int i = A; i <= B; ++i) {
len[i - A] = i;
}
}
void solve (void) {
//init sums
for (int i = 1; i <= A; ++i) {
s[0] += v[i];
if (s[0] % K == 0) ++sol;
}
for (int i = A + 1; i <= B; ++i) {
s[i - A] = s[i - A - 1] + v[i];
if (s[i - A] % K == 0) ++sol;
}
//slide window over vector
int i;
for (i = 2; i <= N - B + 1; ++i) {
//update sums
for (int j = 0; j <= B - A; ++j) {
s[j] = s[j] - v[i-1] + v[i + j + A - 1];
if (s[j] % K == 0) ++sol;
}
}
for (; i <= N - A + 1; ++i) {
for (int j = 0; j < N - i; ++j) {
s[j] = s[j] - v[i-1] + v[i + j + A - 1];
if (s[j] % K == 0) ++sol;
}
}
}
int main (void) {
freopen("divk.in", "r", stdin);
freopen("divk.out", "w", stdout);
readInit();
solve();
printf("%d", sol);
return 0;
}