Cod sursa(job #220206)

Utilizator yoyolichIoana Ardeleanu yoyolich Data 9 noiembrie 2008 20:16:56
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<stdio.h>
#define nmax 666013
FILE *f=fopen("loto.in","r"), *g=fopen("loto.out","w");

struct nod{ int x; nod *leg;} *H[nmax];
int n,i,j,k,l,m,o,a[101],ok,s;
inline void insert(int v)
{
	int h=v%nmax;
	nod *t=new nod;
	t->x=v;
	t->leg=H[h];
	H[h]=t;
}

inlint int find(int v)
{
	int h=v%nmax;
	nod *p;
	for(p=H[h];p->leg;p=p->leg)
		if(p->x == v) {return 1; break;}
	return 0;
}

int main()
{
	fscanf(f,"%d %d",&n,&s);
	for(i=1;i<=n;i++) fscanf(f,"%d",&a[i]);
	
	for(i=1;i<=n;i++)
		for(j=i;j<=n;j++)
			for(k=j;k<=n;k++)
				insert(a[i]+a[j]+a[k]);
	
	for(i=1;i<=n;i++)
		for(j=i;j<=n;j++)
			for(k=j;k<=n;k++)
			
				if(s-a[i]-a[j]-a[k]>=0)
				if(find(s-a[i]-a[j]-a[k])
				{
					fprintf(g,"%d %d %d ",a[i],a[j],a[k]);
					for(l=1;l<=n;l++)
						for(m=l;m<=n;m++)
							for(o=m;o<=n;o++)
								if(a[l]+a[m]+a[o]==s-a[i]-a[j]-a[k])
									{fprintf(g,"%d %d %d\n",a[l],a[m],a[o]);
									ok=1;
								break;}
				}
	
	if(!ok) fprintf(g,"-1\n");