Pagini recente » Cod sursa (job #2030148) | Cod sursa (job #959936) | Cod sursa (job #381941) | Cod sursa (job #1739427) | Cod sursa (job #2777339)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("divk.in");
ofstream fout("divk.out");
vector<int>v[100001];
int main()
{
int n,a,b,i,x,k;
long long s=0,nr=0;
v[0].push_back(0);
fin>>n>>k>>a>>b;
for(i=1;i<=n;i++)
{
fin>>x;
s=s+x;
s%=k;
v[s].push_back(i);
}
for(i=0;i<=k;i++)
{
cout<<i<<": ";
for(auto q:v[i])
cout<<q<<" ";
cout<<endl;
}
for(i=0;i<=k;i++)
{
if(v[i].size()>=2)
{
for(int j=0;j<v[i].size();j++)
{
int st=j+1,dr=v[i].size()-1,mi,poz1=-1,poz2=-1;
while(st<=dr)
{
mi=(st+dr)/2;
if(v[i][j]+a<=v[i][mi])
{
poz1=mi;
dr=mi-1;
}
else st=mi+1;
}
st=1;dr=v[i].size()-1;
while(st<=dr)
{
mi=(st+dr)/2;
if(v[i][j]+b>=v[i][mi])
{
poz2=mi;
st=mi+1;
}
else dr=mi-1;
}
if(poz1!=-1&&poz2!=-1)
{
int x=poz2-poz1+1;
nr+=x;
}
}
}
}
fout<<nr;
}