Cod sursa(job #129524)

Utilizator znakeuJurba Andrei znakeu Data 29 ianuarie 2008 17:43:52
Problema Loto Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <stdio.h>
#include <stdlib.h>

int v[105],v2[1000001],n,s,l;

FILE *in  = fopen("loto.in","r");
FILE *out = fopen("loto.out","w");

int cmp(const void *a, const void *b)
{
	int *aa=(int*)a, *bb=(int*)b;
	int k=*aa, l=*bb;
	return (k-l);
}

void afisarethingy(int x)
{
	int i,j,k,s2;
	for (i=0; i<l; i++)
		for (j=i; j<l; j++)
			for (k=j; k<l; k++)
				if (v[i]+v[j]+v[k]==v2[x])
				{
					fprintf(out,"%d %d %d",v[i],v[j],v[k]);
					return;
				}
}

int main()
{
	int i,j,k;

	fscanf(in,"%d%d",&n,&s);
	for (i=0; i<n; i++)
		fscanf(in,"%d",&v[i]);
	
	l=0;
	for (i=0; i<n; i++)
		for (j=i; j<n; j++)
			for (k=j; k<n; k++)
			{
				v2[l]=v[i]+v[j]+v[k];
				l++;
			}
	
	qsort(v2,l,sizeof(v2[0]),cmp);
	
	j=l-1;
	for (i=0; i<l; i++)
	{
		while (v2[j]+v2[i]>s && j>0)
			j--;
		if (j>=0)
		{
			if (v2[i]+v2[j]==s)
			{
				afisarethingy(i);
				fprintf(out," ");
				afisarethingy(j);
				fprintf(out,"\n");
				fclose(in);
				fclose(out);	
				return 0;
			}
		}
		if (j<0)
			i=l;
	}
	
	
	fprintf(out,"%d\n",-1);
	fclose(in);
	fclose(out);	
	return 0;
}