Cod sursa(job #524481)

Utilizator SadmannCornigeanu Calin Sadmann Data 21 ianuarie 2011 19:57:19
Problema Loto Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include<stdio.h>
FILE *in,*out;
int n,s,V[101],VS[101*101*101],i,j,k;

int afis(int a)
{
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			for(k=1;k<=n;k++)
				if(V[i]+V[j]+V[k]==a)
				{
					fprintf(out,"%d %d %d",V[i],V[j],V[k]);
					return 0;
				}
}

void Quicksort (int data[],int left,int right) {
   int mid,tmp,i,j;
   

   i = left;
   j = right;
   mid = data[(left + right)/2];
   do {
        while(data[i] < mid)
           i++;
       while(mid < data[j])
           j--;
       if (i <= j) {
           tmp = data[i];
           data[i] = data[j];
           data[j] = tmp;
           i++;
           j--;
       }
   } while (i <= j);
   if (left < j) Quicksort(data,left,j);
   if (i < right) Quicksort(data,i,right);
}



int main()
{
	in=fopen("loto.in","rt");
	out=fopen("loto.out","wt");
	fscanf(in,"%d %d",&n,&s);
	for(i=1;i<=n;i++)
		fscanf(in,"%d",&V[i]);
	int cont=0;
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			for(k=1;k<=n;k++)
				VS[++cont]=V[i]+V[j]+V[k];
	Quicksort(VS,1,cont);
			
	int sp=cont;
	int ft=1;
	while(ft<=sp)
	{
		while(VS[ft]+VS[sp]>s && sp>0)
			sp--;
		if(VS[ft]+VS[sp]==s)
		{
			afis(VS[ft]);
			fprintf(out," ");
			afis(VS[sp]);
			fprintf(out,"\n");
			return 0;
		}
		if(sp<=0)
			break;
		while(VS[ft]+VS[sp]<s && ft<=cont)
			ft++;
	}	
	return 0;
}