Pagini recente » Cod sursa (job #2306812) | Cod sursa (job #2978292) | Cod sursa (job #2815657) | Cod sursa (job #1852500) | Cod sursa (job #497362)
Cod sursa(job #497362)
# include <stdio.h>
# define p 666013
struct point
{
int inf,st,dr;
point *leg;
};
point *a[666100],*d[10500000];
int i,r,x,n,u,s,c[1100],l,j,k;
inline void insert (int x,int y, int z)
{
int nr;
point *q,*t;
nr=x%p;
q=a[nr];
while (q && (q->inf!=x)) q=q->leg;
if (!q)
{
t=new point;
t->inf=x;
t->st=y;
t->dr=z;
t->leg=a[nr];
a[nr]=t;
}
}
inline int afisare (int x, point *y)
{
int nr,n[5],i,j;
point *q;
nr=x%p;
q=a[nr];
bool ok=false;
while (q)
{
if (q->inf==x)
if ((y->st!=(q->st)) && (y->st!=(q->dr)) && (y->dr!=(q->st)) && (y->dr!=(q->dr)))
return 1;
q=(q->leg);
}
return 0;
/*if (ok==true)
{
if ((y->st!=(q->st)) && (y->st!=(q->dr)) && (y->dr!=(q->st)) && (y->dr!=(q->dr)))
{
if ((y->st)<(q->st))
{
n[1]=(y->st);
n[2]=(y->dr);
n[3]=(q->st);
n[4]=(q->dr);
for (i=1; i<=3; i++)
for (j=i+1; j<=4; j++)
if (n[i]>n[j])
{
int aux= n[i];
n[i]=n[j];
n[j]=aux;
}
for (i=1; i<=4; i++)
printf ("%d ",n[i]);
printf ("\n");
}
}
}*/
}
int main ()
{
freopen ("oite.in","r",stdin);
freopen ("oite.out","w",stdout);
scanf ("%d %d",&n,&s);
for (i=1; i<=p; i++) a[i]=NULL;
for (i=1; i<=n; i++) scanf ("%d",&c[i]);
l=0;
for (i=1; i<n; i++)
for (j=i+1; j<=n; j++)
{
l++;
d[l]=new point;
d[l]->inf=c[i]+c[j];
d[l]->st=i;
d[l]->dr=j;
insert ((d[l]->inf),i,j);
}
int sol=0;
for (i=1; i<=l; i++)
{
k=s-(d[i]->inf);
if (k>=(d[i]->inf)) sol+=afisare(k,d[i]);
}
printf("%d\n",sol/2);
return 0;
}