Pagini recente » Cod sursa (job #3279559) | Borderou de evaluare (job #1567482) | Cod sursa (job #1124272) | Cod sursa (job #2621750) | Cod sursa (job #2345193)
#include <bits/stdc++.h>
#define MAXK 100005
int N, K, A, B;
int Rest[MAXK];
std::queue <int> Queue1, Queue2;
std::ifstream In ("divk.in");
std::ofstream Out("divk.out");
void Citire() {
In >> N >> K >> A >> B;
}
void Rezolvare() {
int Sum = 0, Ans = 0;
Queue1.push(0), Queue2.push(0);
for (int i=1, X; i<A-1; ++i)
In >> X, Sum += X, Sum %= K,
Queue1.push(Sum), Queue2.push(Sum);
for (int i=A-1, X; i<B; ++i)
In >> X, Sum += X, Sum %= K,
Queue1.push(Sum), Queue2.push(Sum),
Rest[Queue1.front()]++, Queue1.pop(),
Ans += Rest[Sum];
for (int i=B, X; i<=N; ++i)
In >> X, Sum += X, Sum %= K,
Queue1.push(Sum), Queue2.push(Sum),
Rest[Queue1.front()]++, Queue1.pop(),
Rest[Queue2.front()]--, Queue2.pop(),
Ans += Rest[Sum];
Out << Ans << '\n';
}
int main()
{
Citire();
Rezolvare();
return 0;
}