Cod sursa(job #167702)

Utilizator ProtomanAndrei Purice Protoman Data 29 martie 2008 22:29:11
Problema Oite Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>
#define bz 2678349
#define mx 1148577
struct poi
{
	long s,a,b;
} s[mx+2];
struct nod
{
	poi el;
	nod *ua;
} *l[bz+2];
long i,j,c,sm,ct,nr;
long a[1035];

void clad(long loc, poi x)
{
	nod *p;
	p=new nod;
	p->el=x;
	p->ua=l[loc];
	l[loc]=p;
}

void cauta(long loc, poi x)
{
	nod *p;
	p=l[loc];
	while (p)
	{
		poi h=(p->el);
		if (h.s==sm-x.s && h.a!=x.a && h.a!=x.b && h.b!=x.a && h.b!=x.b)
			nr++;
		p=p->ua;
	}
}

int main()
{
	freopen("oite.in","r",stdin);
	freopen("oite.out","w",stdout);
	scanf("%ld %ld",&c,&sm);
	for (i=1; i<=c; i++)
		scanf("%ld",&a[i]);
	for (i=1; i<c; i++)
		for (j=i+1; j<=c; j++)
		{
			ct++;
			s[ct].s=a[i]+a[j];
			s[ct].a=i;
			s[ct].b=j;
			clad((s[ct].s)%bz,s[ct]);
		}
	for (i=1; i<=ct; i++)
		cauta((sm-s[i].s)%bz,s[i]);
	printf("%ld",nr/6);
	fclose(stdin);
	fclose(stdout);
	return 0;
}