Pagini recente » Cod sursa (job #194678) | Cod sursa (job #1169599) | Cod sursa (job #1632580) | Cod sursa (job #2082162) | Cod sursa (job #2525329)
#include <vector>
#include <fstream>
#include <algorithm>
using namespace std;
//ifstream cin("divk.in");
ofstream cout("divk.out");
int n, k, a, b, l[500001];
int ps[500002];
vector<int> sums[100001];
long long sequences = 0;
int main() {
auto F = fopen("divk.in", "r");
fscanf(F, "%d%d%d%d", &n, &k, &a, &b);
a++;
b++;
for(int x = 1; x<=n; x++) {
fscanf(F, "%d", &l[x]);
l[x] %= k;
}
sums[0].push_back(0);
for(int x = 1; x<=n; x++) {
ps[x] += ps[x - 1] + l[x];
ps[x] %= k;
sums[ps[x]].push_back(x);
}
for(int x = 0; x<=100000; x++) {
vector<int> close;
vector<int> far;
int ci = 0, fi = 0;
for(int i = 0; i!=sums[x].size();i++) {
close.push_back(sums[x][i]);
while((close.size() - ci) && ((sums[x][i] - close[ci] + 1) >= a)) {
far.push_back(close[ci]);
ci++;
}
while((far.size() - fi) && ((sums[x][i] - far[fi] + 1) > b)) {
fi++;
}
sequences += far.size() - fi;
}
}
cout<<sequences<<endl;
}