Cod sursa(job #495650)

Utilizator Eugen01Vasilescu Eugen Eugen01 Data 26 octombrie 2010 13:10:45
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include<stdio.h>
#include<stdlib.h>

struct point
{
	int inf,s1,s2,s3;
	point *leg;
};
								
point *p,*s[400000];
int qqq,y,i,j,k,n,a[100],suma;
long long sum;

void verif(int q)
{
point *qq;
qq=s[q%(n*n*n/3)];
     
while (qq!=NULL)
    
{

if (qq->inf==q&&qqq==0) {
             
        printf("%d %d %d %d %d %d",s[i]->s1,s[i]->s2,s[i]->s3,qq->s1,qq->s2,qq->s3);
        qqq=1;
         
    }
         
    qq=qq->leg;    
}
} 

void hash(int x,int y)
{
 
p=new point;
p->inf=x;    
p->leg=NULL;
p->s1=i;
p->s2=j;
p->s3=k;
 
 
if (s[y]!=NULL) p->leg=s[y];
     
s[y]=p;
} 


int main()
{
	freopen("loto.in","r",stdin);
	freopen("loto.out","w",stdout);
	
	scanf("%d%lld",&n,&sum);
	for (i=1;i<=n;i++)
		scanf("%d",&a[i]);
	
	for (i=1;i<=n;i++)
		for (j=i;j<=n;j++)
			for (k=j;k<=n;k++)
			{
				suma=a[i]+a[j]+a[k];
				hash(suma,(suma%(n*n*n/3)));
			}
			
			
	qqq=0;
	
	
	for (i=1;i<=n*n*n/3;i++)
	while (s[i]!=NULL)
        
        {       
            verif(sum-s[i]->inf);       
            if (qqq==1) return 0;       
            s[i]=s[i]->leg;        
        }         
	
	if (qqq==0) printf("-1");	
	return 0;
}