Cod sursa(job #129493)

Utilizator znakeuJurba Andrei znakeu Data 29 ianuarie 2008 16:47:59
Problema Loto Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <stdio.h>
#include <stdlib.h>

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


int main()
{
	int n,s,i,j,k,l,x,y,z,sl;
	int v[105];
	int v2[1000001];
	
	FILE *in  = fopen("loto.in","r");
	FILE *out = fopen("loto.out","w");
	
	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);
	
	for (i=0; i<l && sl<2; i++)
	{
		j=l-1;
		while (v2[i]+v2[j]>s && j>0)
			j--;
		if (j>=0)
			if (v2[i]+v2[j]==s)
			{
				sl=0;
				for (x=0; x<n && sl<2; x++)
					for (y=x; y<n && sl<2; y++)
						for (z=y; z<n && sl<2; z++)
						{
							if (v2[i]==v[x]+v[y]+v[z])
								if (sl==0)
								{
									fprintf(out,"%d %d %d ",v[x],v[y],v[z]);
									sl++;
								}
								else
									if (sl==1)
										{
											fprintf(out,"%d %d %d\n",v[x],v[y],v[z]);
											sl++;
										}
							if (v2[j]==v[x]+v[y]+v[z])
								if (sl==0)
								{
									fprintf(out,"%d %d %d ",v[x],v[y],v[z]);
									sl++;
								}
								else
									if (sl==1)
										{
											fprintf(out,"%d %d %d\n",v[x],v[y],v[z]);
											sl++;
										}
						}
			}
	}
	
	fclose(in);
	fclose(out);
	
	return 0;
}