Pagini recente » Cod sursa (job #2725587) | Cod sursa (job #942905) | Borderou de evaluare (job #2678633) | Cod sursa (job #896081) | Cod sursa (job #2889926)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("divk.in");
ofstream fout("divk.out");
int n,k,a,b;
int v[500005];
vector <int> c,p[100005];
long long f(int x)
{
long long sum=0;
int i,j,j1,j2,s;
for(i=0;i<k;i++)
{
j2=0;
s=0;
if(p[i].size()<=1) continue;
c.clear();
c.push_back(0);
for(j=0;j<p[i].size()-1;j++) c.push_back(p[i][j+1]-p[i][j]);
for(j1=1;j1<c.size();j1++)
{
while(j2<c.size()-1 && s+c[j2+1]<=x)
{
j2++;
s+=c[j2];
}
if(j2>=j1) sum+=j2-j1+1;
s-=c[j1];
}
}
return sum;
}
int main()
{
long long s=0;
fin>>n>>k>>a>>b;
for(int i=1;i<=n;i++) fin>>v[i];
p[0].push_back(0);
for(int i=1;i<=n;i++)
{
s+=v[i];
p[s%k].push_back(i);
}
fout<<f(b)-f(a-1)<<"\n";
return 0;
}