Pagini recente » Cod sursa (job #2455558) | Cod sursa (job #2742637) | Cod sursa (job #1891874) | Cod sursa (job #142826) | Cod sursa (job #3267844)
#include <bits/stdc++.h>
using namespace std;
ifstream f("divk.in");
ofstream g("divk.out");
const int MAX_N = 500'000;
const int MAX_K = 100'000;
int sp[MAX_N + 5];
int fr[MAX_K + 5];
int a[MAX_N + 5];
int N, K, A, B;
long long nr_subsecv(int x)
{
/// returneaza numarul subsecventelor cu suma divizibila cu K si lungimea l <= x
memset(fr, 0, sizeof(fr));
long long cnt = 0;
int j = 0;
fr[0] = 1;
for (int i = 1; i <= N; i++)
{
sp[i] = (sp[i - 1] + a[i]) % K;
if (i - j > x)
{
fr[sp[j]]--;
j++;
}
cnt += fr[sp[i]];
fr[sp[i]]++;
}
return cnt;
}
int main()
{
f >> N >> K >> A >> B;
for (int i = 1; i <= N; i++)
f >> a[i];
g << nr_subsecv(B) - nr_subsecv(A - 1) << '\n';
f.close();
g.close();
return 0;
}