Pagini recente » Cod sursa (job #2299400) | Cod sursa (job #2911886) | Cod sursa (job #860324) | Cod sursa (job #2388036) | Cod sursa (job #1561207)
#include <cstdio>
#include <vector>
#define MAX 100000
using namespace std;
vector<int> v[MAX+1];
int main()
{
freopen("divk.in", "r", stdin);
freopen("divk.out", "w", stdout);
int n, k,a,b, i, s=0, st, dr, mij, poza, pozb, r=0, x, j;
scanf("%d%d%d%d", &n, &k, &a, &b);
v[0].push_back(0);
for(i=1;i<=n;i++)
{
scanf("%d", &x);
s=(s+x)%k;
v[s].push_back(i);
}
for(i=0;i<k;i++)
{
for(j=0;j<v[i].size();j++)
{
st=j;
dr=v[i].size()-1;
poza=0;
pozb=-1;
while(st<=dr)
{
mij=(st+dr)/2;
if(v[i][mij]-v[i][j]>=a){
if(v[i][mij]-v[i][j]<=b) poza=mij;
dr=mij-1;
}
else st=mij+1;
}
st=j;
dr=v[i].size();
while(st<=dr)
{
mij=(st+dr)/2;
if(v[i][mij]-v[i][j]<=b)
{
if (v[i][mij]-v[i][j]>=a) pozb=mij;
st=mij+1;
}else dr=mij-1;
}
r+=pozb-poza+1;
}
}
printf("%d", r);
return 0;
}