Pagini recente » Cod sursa (job #2765868) | Borderou de evaluare (job #1036380) | Cod sursa (job #1427540) | Cod sursa (job #2110198) | Cod sursa (job #1847540)
#include <cstdio>
int resturi[500001];
int f[100001];
int main() {
freopen("divk.in", "r", stdin);
freopen("divk.out", "w", stdout);
int N, k, A, B, x;
scanf("%d %d %d %d", &N, &k, &A, &B);
for(int i = 1; i <= N; ++ i) {
scanf("%d", &x);
resturi[i] = (resturi[i - 1] + x) % k;
if(i >= A and i <= B)
++ f[resturi[i - A]];
}
long long ans = 0LL;
for(int i = A; i <= B; ++ i)
ans += f[resturi[i]];
for(int i = B + 1; i <= N; ++ i) {
ans += f[resturi[i]];
-- f[resturi[i - B - 1]];
++ f[resturi[i - A]];
}
printf("%lld\n", ans);
return 0;
}