Pagini recente » Cod sursa (job #1865736) | Cod sursa (job #1124883) | Istoria paginii runda/simulare-cartita-19a | Istoria paginii runda/jff | Cod sursa (job #247065)
Cod sursa(job #247065)
#include<stdio.h>
#include<stdlib.h>
#define NMAX 500001
struct el{int r,p;};
int n;
el v[NMAX];
void poz(int st,int dr,int &piv){
int i=st,j=dr,d=0;
el t;
while(i<j){
if(v[i].r>v[j].r||v[i].r==v[j].r&&v[i].p>v[j].p)
{t=v[i];v[i]=v[j];v[j]=t;d=1-d;}
i+=d;j-=1-d;
}
piv=i;
}
void qsrt(int li,int ls){
int piv;
if(li<ls){
poz(li,ls,piv);
qsrt(li,piv-1);
qsrt(piv+1,ls);
}
}
int main(){
freopen("divk.in","r",stdin);
freopen("divk.out","w",stdout);
int i,j,nrs=0,k,a,b,x,d,k5;
char sir[20],*p;
scanf("%d%d%d%d\n",&n,&k,&a,&b);
k5=10*k;
for(i=1;i<=n;++i){
v[i].p=i;
fgets(sir,20,stdin);
x=0;p=sir;
while(*p!='\n'&&*p) x=10*x+(*p-48),p++;
//x=atoi(sir);
v[i].r=v[i-1].r+x;
if(v[i].r>=k5) v[i].r=v[i].r%k;
else while(v[i].r>=k) v[i].r-=k;
}
qsrt(1,n);
i=0;
while(i<n){
k=0;
j=i+1;
while(v[j].r==v[i].r){
// k=1;
d=v[j].p-v[i].p;
if(d>b) {k=2;break;}
if(d>=a) {nrs++;k=1;}
++j;
}
if(k) i++;
else i=j;
// i++;
}
printf("%d",nrs);
return 0;
}