Pagini recente » bob | Cod sursa (job #896768) | Statistici Cezara Muresan (cezi.m39) | Cod sursa (job #3037931) | Cod sursa (job #497989)
Cod sursa(job #497989)
# include <fstream.h>
ifstream f ("divk.in");
ofstream g ("divk.out");
int i,j,n,k,la,lb,s[500100],x,y,v[500100];
struct nod
{
int info;
nod *urm;
}*a[100010],*p,*q;
void adauga (int x,int i)
{
p=new nod;
p->info=x;
p->urm=a[i];
a[i]=p;
}
int calc (nod *p,int lim)
{
int nr=0,i=1,j=2,x,y,z,ok;
q=p->urm;
ok=0;
z=p->info;
while (q)
{
ok=1;
if (q->info-p->info<=lim)
{
nr++;
q=q->urm;
j++;
}
else
{
p=p->urm;
i++;
if (q->info-p->info<=lim)
nr=nr+(j-i)-1;
}
}
if (ok==0)
if (v[z]%k==0)
return 1;
if (j-i-2>0)
{
y=j-i-1;
x=(y*(y-1))/2;
nr=nr+x;
}
return nr;
}
int asd (int lim)
{
int nr=0;
for (i=0;i<k;i++)
if (a[i])
nr=nr+calc(a[i],lim);
return nr;
}
int main ()
{
f>>n>>k>>la>>lb;
for (i=1;i<=n;i++)
{
f>>x;
v[i]=x;
s[i]=s[i-1]+x;
}
for (i=n;i>=1;i--)
adauga (i,s[i]%k);
p=new nod;
p->info=0;
p->urm=a[0];
a[0]=p;
x=asd (lb);
y=asd (la-1);
g<<x-y;
return 0;
}