Pagini recente » Cod sursa (job #171120) | Cod sursa (job #2900865) | Cod sursa (job #2630653) | Cod sursa (job #45111) | Cod sursa (job #1149373)
#include <cstdio>
#include <vector>
#include <queue>
#include <fstream>
using namespace std;
ifstream fin("divk.in");
ofstream fout("divk.out");
struct st{
unsigned int start;
unsigned int stop;
vector<int> pos;
};
int main(int argc, char *argv[]) {
int k, a, b, n, c = 0, ant = 0;
fin >> n >> k >> a >> b;
vector<st> mod(k, st());
mod[0].pos.push_back(0);
for (int i = 0; i < n; ++i) {
int t;
fin >> t;
int m = (ant + t) % k;
ant = m;
st s = mod[m];
if (s.pos.size() == 0) {
s.pos.push_back(i + 1);
s.start = 0;
s.stop = 0;
continue;
}
while (s.stop < s.pos.size()) {
if (i - s.pos[s.stop] + 1 >= a) {
++s.stop;
} else {
break;
}
}
while (s.start < s.pos.size()) {
if (i - s.pos[s.start] + 1 < b) {
++s.start;
} else {
break;
}
}
s.pos.push_back(i + 1);
c = c + s.stop - s.start + 1;
}
fout << c << endl;
fout.close();
return 0;
}