Pagini recente » Cod sursa (job #1769153) | Cod sursa (job #2061318) | Cod sursa (job #2279626) | Cod sursa (job #920542) | Cod sursa (job #1552709)
#include<fstream>
#include<cstdio>
#include<vector>
using namespace std;
int n, k, a, b, p, u, mid, x, i, j, sum;
long long sol;
vector< int > v[100005];
FILE * fin = fopen("divk.in", "r");
FILE * fout = fopen("divk.out", "w");
int main(){
fscanf(fin, "%d%d%d%d", &n, &k, &a, &b);
for(i = 1; i <= n; i++){
fscanf(fin, "%d", &x);
sum = (sum + x) % k;
v[sum].push_back(i);
}
for(i = 0; i < v[0].size(); i++){
if(v[0][i] >= a && v[0][i] <= b){
sol++;
}
}
for(j = 0; j < k; j++){
for(i = 0; i < v[j].size(); i++){
p = i + 1;
u = v[j].size() - 1;
while(p <= u){
mid = (p + u) / 2;
if(v[j][mid] - v[j][i] >= a){
u = mid - 1;
}
else{
p = mid + 1;
}
}
x = p;
p = i + 1;
u = v[j].size() - 1;
while(p <= u){
mid = (p + u) / 2;
if(v[j][mid] - v[j][i] <= b){
p = mid + 1;
}
else{
u = mid - 1;
}
}
sol += u - x + 1;
}
}
fprintf(fout, "%lld\n", sol);
return 0;
}