Cod sursa(job #267743)

Utilizator ooctavTuchila Octavian ooctav Data 27 februarie 2009 22:44:40
Problema Loto Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
// loto.cpp : Defines the entry point for the console application.
//

#include <stdio.h>
#include <stdlib.h>
int e[104],suma;
int n;
int ep[7];
struct interval
{
	int a,b,c,d;
};
interval f[1000001];

int compar(const void * a,const void * b)
{
	 return ( *(int*)a - *(int*)b );

}
void cautb(FILE *f2)
{
	int dr,st,mij,rez,b=0;
	for(int i=1;i<=n*n*n;i++)
	{
		st=i;
		dr=n*n*n;
		while(st<=dr)
		{
			mij=st+(dr-st)/2;
			if(f[mij].a+f[i].a==suma)
			{
				ep[1]=f[i].b;
				ep[2]=f[i].c;
				ep[3]=f[i].d;
				ep[4]=f[mij].b;
				ep[5]=f[mij].c;
				ep[6]=f[mij].d;
				qsort(ep,7,sizeof(int),compar);
				for(int j=1;j<=7-1;j++)
					fprintf(f2,"%d ",ep[j]);
				b=1;
				break;
			}
			else if(f[mij].a+f[i].a>suma)
					dr=mij-1;
			else
				st=mij+1;
		}
		if(b==1)
			break;
	}
	if(b==0)
		fprintf(f2,"-1");
}
int main()
{
	int i,j,l,k,o=1,p;
	bool c=false;
	FILE *f1,*f2;
	f1=fopen("loto.in","r");
	f2=fopen("loto.out","w");
	fscanf(f1,"%d %d",&n,&suma);
	for(i=1;i<=n;i++)
		fscanf(f1,"%d",&e[i]);
	qsort(e,n+1,sizeof(int),compar);
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			for(l=1;l<=n;l++)
			{
				f[o].a=e[i]+e[j]+e[l];
				f[o].b=e[i];
				f[o].c=e[j];
				f[o].d=e[l];
				o++;
			}
	qsort(f+3,n+1,sizeof(f[0]),compar);	
	cautb(f2);
	fclose(f1);
	fclose(f2);
	return 0;
}