Cod sursa(job #383585)

Utilizator bugyBogdan Vlad bugy Data 16 ianuarie 2010 23:37:03
Problema Loto Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include<stdio.h>
using namespace std;
#define DIM 100

long long s,suma,A[DIM],V[7],S;
int i,ok,p,c,x,n;

int quicksort(int inceput,int ultimul)      
{int i,j,temp,aux; 
  i=inceput;      
  j=ultimul;      
  temp=A[(i+j)/2];      
 do     
   {while(A[i]<temp)      i++;      
    while(A[j]>temp)      j--;      
    if(i<j)      
     {aux=A[i]; A[i]=A[j]; A[j]=aux; 	}      
    if(i<=j)      
     {j=j-1;      
      i=i+1;      
     }      
   }while(i<=j);      
   if(inceput<j)    quicksort(inceput,j);      
   if(i<ultimul)    quicksort(i,ultimul);      
   
}  


long caut_bin(long in,long sf)
  {long mij;
  mij=(in+sf)/2;
  if(in>sf) return A[in-1];
   if(A[mij]==s) return A[mij];   
      else if(A[mij]<s) return caut_bin(mij+1,sf);
          else return caut_bin(in,mij-1);	  
   }


int main()
{
FILE *f=fopen("loto.in","r"), *g=fopen("loto.out","w");
fscanf(f,"%d %lld",&n,&suma);

for(i=1;i<=n;i++)
	fscanf(f,"%d",&A[i]);

quicksort(1,n);
c=n;  p=1; s=suma;
while(!ok)
{s=suma;
	V[p]=A[c]; 
	s-=V[p];
	
	for(i=p+1;i<=6;i++)
		{x=caut_bin(1,n);
		s-=x; V[i]=x;
		if(s==0&&i==6) { ok=2; break;}
		else if(s<=0) {ok=1; break;}
		}
	if(ok==0)
		fprintf(g,"-1\n");
	else if(ok==2)
		{
		for(i=1;i<=6;i++)
			A[i]=V[i];
			quicksort(1,6);
		for(i=1;i<=6;i++)
			 fprintf(g,"%ld ",A[i]);
		fprintf(g,"\n");
}
	else if(ok==1)
		{if(c<=1)
			{p++; c=n-1;}
		else c--;
	ok=0;}
}



fclose(f);
fclose(g);
return 0;
}