Cod sursa(job #167915)

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

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

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