Pagini recente » Cod sursa (job #2526673) | Cod sursa (job #2147959) | Cod sursa (job #1476217) | Cod sursa (job #3168875) | Cod sursa (job #3203308)
#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);
st1[i]=1;
st2[i]=1;
}
stv[0].push_back(0);
st1[0]=1;
st2[0]=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)>a)
{
st2[x]++;
}
while(st1[x]<=dr[x] && (i-stv[x][st1[x]]+1)<b)
{
st1[x]++;
}
}
if(dr[x]!=-1)
nr+=abs(st1[x]-st2[x]);
stv[x].push_back(i);
dr[x]++;
}
fout<<nr;
return 0;
}