Cod sursa(job #167877)

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

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