Pagini recente » Cod sursa (job #611769) | Cod sursa (job #131149) | Cod sursa (job #2917418) | Cod sursa (job #2681780) | Cod sursa (job #1566218)
#include <bits/stdc++.h>
#define nmax 100001
using namespace std;
vector<int> h[nmax];
int n, K, A, B;
void Citire()
{
int i, x, s;
ifstream fin("divk.in");
fin >> n >> K >> A >> B;
s = 0;
h[0].push_back(0);
for (i = 1; i <= n; ++i)
{
fin >> x;
s = (s + x) % K;
h[s].push_back(i);
}
fin.close();
}
/// cate secvente de lungime cel mult L au suma divizibila cu K
long long Rezolva(int L)
{
int i, j;
unsigned p;
long long nrSecv = 0;
for (i = 0; i < K; ++i)
{
/// parcurg lista h[i] cu indicii divizibili cu i
j = 0;
for (p = 0; p < h[i].size(); ++p)
{
while (h[i][p] - h[i][j] > L)
j++;
nrSecv += (p - j + 1);
}
}
return nrSecv;
}
void Afisare()
{
long long sol;
sol = Rezolva(B) - Rezolva(A - 1);
ofstream fout("divk.out");
fout << sol << "\n";
fout.close();
}
int main()
{
Citire();
Afisare();
return 0;
}