Pagini recente » Cod sursa (job #690792) | Cod sursa (job #1849065) | Cod sursa (job #1060837) | Cod sursa (job #2926632) | Cod sursa (job #3203337)
#include <fstream>
#include <vector>
#include <bits/stdc++.h>
using namespace std;
ifstream fin("divk.in");
ofstream fout("divk.out");
int n,k,a,b,s[500001],st1[100001],st2[100001],dr[100001],nr;
vector <int> stv[100001];
int main()
{
fin>>n>>k>>a>>b;
for(int i=1;i<=n;i++)
{
fin>>s[i];
s[i]=(s[i]+s[i-1])%k;
}
stv[0].push_back(0);
for(int i=1;i<k;i++)
{
stv[i].push_back(0);
}
stv[0].push_back(1);
dr[0]=1;
for(int i=1;i<=n;i++)
{
int x=s[i];
if(dr[x]!=0)
{
while(st2[x]<dr[x] && (i-stv[x][st2[x]+1]+1)>a)
{
st2[x]++;
}
while(st1[x]<dr[x] && (i-stv[x][st1[x]+1]+1)>b)
{
st1[x]++;
}
}
if((i-stv[x][st1[x]+1]+1)>b)
continue;
if(st2[x]-st1[x]+1>0 && dr[x]!=0)
nr+=st2[x]-st1[x];
stv[x].push_back(i);
dr[x]++;
}
fout<<nr;
return 0;
}