Pagini recente » Cod sursa (job #1169409) | Cod sursa (job #2714803) | Cod sursa (job #762006) | Cod sursa (job #806092) | Cod sursa (job #1560104)
#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, i, a, b,k, st, dr, mij, sum=0, x, j, gasit=0;
sum=0;
scanf("%d%d%d%d", &n, &k, &a, &b);
v[0].push_back(0);
for(i=1;i<=n;i++)
{
scanf("%d", &x);
sum=(sum+x)%k;
v[sum].push_back(i);
}
for(i=0;i<k;i++)
{
for(j=1;j<v[i].size();j++)
{
gasit=0;
int poza, pozb;
st=0;
dr=j-1;
while(st<=dr)
{
mij=(st+dr)/2;
if(v[i][j]-v[i][mij]>=a)
{
poza=mij;
gasit=1;
st=mij+1;
}
else dr=mij-1;
}
st=0;
dr=j-1;
while(st<=dr)
{
mij=(st+dr)/2;
if(v[i][j]-v[i][mij]<=b)
{
pozb=mij;
gasit+=2;
dr=mij-1;
}
else st=mij+1;
}
if(gasit==3)
sum+=poza-pozb+1;
}
}
printf("%d", sum);
return 0;
}