Pagini recente » Cod sursa (job #1828683) | Cod sursa (job #2574874) | Cod sursa (job #1349993) | Cod sursa (job #2883254) | Cod sursa (job #1052471)
#include <fstream>
#include <cstring>
#define MAXN 500001
#define MAXK 100001
using namespace std;
int v[MAXN], freq[MAXK], sume[MAXN];
int main() {
int N, K, A, B;
ifstream in("divk.in");
in >> N >> K >> A >> B;
v[0] = 0;
for (int i = 1; i <= N; ++i) {
in >> v[i];
}
in.close();
sume[0] = 0;
for (int i = 1; i <= N; ++i) {
sume[i] = (sume[i - 1] + v[i]) % K;
}
// calculam f(B):
int fB = 0;
for (int i = 0; i < B; ++i) {
int rest = sume[i];
fB += freq[rest];
++freq[rest];
}
for (int i = B; i <= N; ++i) {
int rest = sume[i];
fB += freq[rest];
++freq[rest];
--freq[sume[i - B]];
}
// calculam f(A - 1):
int fA1 = 0;
memset(freq, 0, sizeof(freq));
for (int i = 0; i < A - 1; ++i) {
int rest = sume[i];
fA1 += freq[rest];
++freq[rest];
}
for (int i = A - 1; i <= N; ++i) {
int rest = sume[i];
fA1 += freq[rest];
++freq[rest];
--freq[sume[i - A + 1]];
}
ofstream out("divk.out");
out << fB - fA1;
out.close();
return 0;
}