Cod sursa(job #168049)

Utilizator ProtomanAndrei Purice Protoman Data 30 martie 2008 17:22:15
Problema Oite Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <stdio.h>
#define dif 10000
#define bz 150001
struct nod
{
	unsigned long el;
	nod *ua;
} *l[bz+2];
long i,j,a1,a2,c,sm;
long a[1100035];
long long nr;


void clad(long loc)
{
	nod *p;
	p=new nod;
	p->el=dif*i+j;
	p->ua=l[loc];
	l[loc]=p;
}

void cauta(long loc)
{
	nod *p;
	p=l[loc];
	while (p)
	{
		a1=(p->el)%dif;
		a2=(p->el)/dif;
		if (sm-a[i]-a[j]==a[a1]+a[a2] && a1!=i && a2!=i && a1!=j && a2!= j)
			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++)
			clad((a[i]+a[j])%bz);
	for (i=1; i<c; i++)
		for (j=i+1; j<=c; j++)
			cauta((sm-a[i]-a[j])%bz);
	printf("%lld\n",nr/6);
	fclose(stdin);
	fclose(stdout);
	return 0;
}