Pagini recente » Cod sursa (job #815459) | Cod sursa (job #1466706) | Cod sursa (job #400579) | Cod sursa (job #383241) | Cod sursa (job #3278111)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("divk.in");
ofstream fout("divk.out");
/**
6 5 2 4
a = 2 9 5 4 1 4
sp= 0 2 1 1 0 1 0
*/
/// nr de secv de lungime cel mult X care sunt divizivile cu K
int n,a[500005],A,B,k,sp[500001];
long long Numara(int X)
{
int fr[100001]={0},i;
long long cnt=0;
fr[0]=1;
sp[0]=0;
for(i=1;i<=n;i++)
{
sp[i]=(sp[i-1]+a[i])%k;
if(i>X)
fr[sp[i-X-1]]--;
cnt+=fr[sp[i]];
fr[sp[i]]++;
}
return cnt;
}
int main()
{
int i;
fin>>n>>k>>A>>B;
for(i=1;i<=n;i++)
fin>>a[i];
fout<<Numara(B)-Numara(A-1);
return 0;
}