Pagini recente » Cod sursa (job #2217790) | Cod sursa (job #3271634) | Cod sursa (job #1800797) | Borderou de evaluare (job #935331) | Cod sursa (job #1200999)
#include <stdio.h>
#define MAXN 500000
#define MAXK 100000
long long sum[MAXN];
long long nrsecv(int nr, int n, int k){
int i, fr[MAXK];
long long rez = 0;
for(i = 0; i < MAXK; i++) fr[i] = 0;
for(i = 0; i < nr; i++) fr[sum[i]]++;
rez += fr[0];
while(i < n){
fr[sum[i - nr]]--;
fr[sum[i]]++;
rez += fr[sum[i - nr]];
i++;
}
for(i = n - nr + 1; i < n; i++){
fr[sum[i]]--;
rez += fr[sum[i]];
}
return rez;
}
int main(){
FILE *in = fopen("divk.in", "r");
int n, k, a, b;
fscanf(in, "%d%d%d%d", &n, &k, &a, &b);
int i, x;
for(i = 0; i < n; i++){
fscanf(in, "%d", &x);
sum[i] = (sum[i - 1] + x) % k;
}
fclose(in);
FILE *out = fopen("divk.out", "w");
fprintf(out, "%lld", (nrsecv(b, n, k) - nrsecv(a - 1, n, k)));
fclose(out);
return 0;
}