Pagini recente » Cod sursa (job #2496074) | Cod sursa (job #876831) | Cod sursa (job #1413312) | Cod sursa (job #1516876) | Cod sursa (job #1700364)
#include <fstream>
using namespace std;
ifstream cin("divk.in");
ofstream cout("divk.out");
const int MaxN = 500005, AuxVal = -0x3f3f3f3f, MaxK = 100005;
int v[MaxN], ModFreq[MaxK];
int n, k, A, B, CurrSum, RgSum, LfSum = AuxVal, Ans;
int main() {
cin >> n >> k >> A >> B;
for (int i = 1; i <= n; ++i) {
cin >> v[i];
if (i <= A) {
CurrSum += v[i];
CurrSum %= k;
}
}
ModFreq[0] = 1;
v[0] = AuxVal;
if (n >= A + 1) Ans += ModFreq[CurrSum];
for (int i = A + 1; i <= n; ++i) {
CurrSum += v[i];
CurrSum %= k;
RgSum += v[i - A];
RgSum %= k;
if (i == B + 1) --ModFreq[0];
if (i >= B + 1) {
LfSum = (LfSum < 0) ? 0 : LfSum;
LfSum += v[i - B];
LfSum %= k;
}
++ModFreq[RgSum];
if (LfSum >= 0) {
--ModFreq[LfSum];
}
Ans += ModFreq[CurrSum];
}
cout << Ans << '\n';
return 0;
}