Pagini recente » Cod sursa (job #3240845) | Cod sursa (job #1247594) | Cod sursa (job #757288) | Cod sursa (job #1759611) | Cod sursa (job #498079)
Cod sursa(job #498079)
# include <fstream.h>
ifstream f ("divk.in");
ofstream g ("divk.out");
long long int i,j,n,k,la,lb,s[500100],x,y;
struct nod
{
int info;
nod *urm;
}*a[100010],*p,*q;
void adauga (long long int x,long long int i)
{
p=new nod;
p->info=x;
p->urm=a[i];
a[i]=p;
}
long long int calc (nod *p,long long int lim)
{
long long int k=0,i=1,j=2,x,y;
q=p->urm;
while (q)
{
if (q->info-p->info<=lim)
{
k++;
q=q->urm;
j++;
}
else
{
p=p->urm;
i++;
if (q->info-p->info<=lim)
k=k+(j-i)-1;
}
}
if (j-i-2>0)
{
y=j-i-1;
x=(y*(y-1))/2;
k=k+x;
}
return k;
}
long long int asd (long long int lim)
{
long long 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;
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;
}