Cod sursa(job #496535)

Utilizator Eugen01Vasilescu Eugen Eugen01 Data 29 octombrie 2010 17:05:48
Problema Oite Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include<stdio.h>  
#include<math.h> 
#include<stdlib.h>  
  
   
 
struct point  
{  
	int inf,s1,s2,s3;  
	point *leg;  
};  
 
 
point *qq,*p,*s[600];  
int qqq,y,i,j,k,n,a[101];  
long long suma,sum,nr;   
 
 
void verif(int q,int y)  
{  
	qq=new point; 
	qq=s[q%(y+1)];  
 
	while (qq!=NULL)     
	{  
	if (qq->inf==q);  
		if (qq->s1!=s[i]->s1) 
			if (qq->s1!=s[i]->s2) 
				if (qq->s2!=s[i]->s1) 
					if (qq->s2!=s[i]->s2) 
						if (qq->s1!=qq->s2) 
							if (s[i]->s1!=s[i]->s2) 
 
								//{ 
								//  printf("%d %d %d %d\n",qq->s1,qq->s2,s[i]->s1,s[i]->s2); 
								nr++;  
								//} 
	qq=qq->leg;      
	} 
} 
 
void hash(int x,int y)  
{ 
 
	p=new point; 
	p->inf=x;
	p->s1=i;
	p->s2=j;
	p->leg=s[x%(y+1)]; 
	s[x%(y+1)]=p;
	
	
	//p=new point;  
	//p->inf=x;      
	//p->s1=i; 
	//p->s2=j; 
 
	//s[q%(qqq+1)]=p;
 
	//if (s[y]!=NULL) 
	//p->leg=s[y];  
 
	//s[y]=p;  
}  
 
 
int main()  
{  
	freopen("oite.in","r",stdin);  
	freopen("oite.out","w",stdout);  
 
	scanf("%d%lld",&n,&sum);  
	for (i=1;i<=n;i++)  
		scanf("%d",&a[i]);  
      
 
 
 
 
	for (i=1;i<=n-1;i++)  
	for (j=i+1;j<=n;j++)  
	{                 
		suma=a[i]+a[j];                 
		hash(suma,(suma%503));             
	}              
 
	qqq=0;  
	for (i=0;i<=503;i++)           
 
	while (s[i]!=NULL)  
 
	{         
		if (sum-s[i]->inf>=0) verif(sum-s[i]->inf,(sum-s[i]->inf)%503);         
		s[i]=s[i]->leg;          
	}           
 
	 
	printf("%lld",nr/3);   
 
	return 0;  
}