Cod sursa(job #769444)

Utilizator lucky1992Ion Ion lucky1992 Data 19 iulie 2012 13:57:43
Problema Loto Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <stdlib.h>
#define MAX 1000001

using namespace std;


typedef struct _sume{
  int a,b,c,suma;
} sume;

int N, S, vec[105];
sume s[MAX];

int CautBin( int x, int left, int right, sume s[] ){
    int mid;
    while ( left <= right ) {
      mid = ( left + right ) / 2;
      if ( s[mid].suma == x ) 
	 return mid;
      else if ( x < s[mid].suma )
	 right = mid - 1;
      else left = mid + 1;
    }
    return -1;
}


void solutie( int n, FILE* pf){
  int sol;
  for( int i = 0; i < N; i++ )
    for( int j = i; j < N; j++ )
      for( int k = j; k < N; k++ ){
	if(  ( sol = CautBin( S - ( vec[i] + vec[j] + vec[k] ), 0, n-1, s ) ) != - 1 ){
	  fprintf(pf,"%d %d %d %d %d %d\n", vec[i], vec[j], vec[k], s[sol].a, s[sol].b, s[sol].c);
	  return;
	}
      }
  fprintf( pf,"-1\n");
}

bool comp( sume s1, sume s2 ){
  if( s1.suma < s2.suma ) return true;
  else return false;
  
}
	  
int main () {
  FILE *f1, *f2;
  f1 = fopen("loto.in", "r" );
  f2 = fopen("loto.out", "w" );
 
  int t = 0;

  
  fscanf(f1,"%d%d", &N, &S );
  for( int i = 0 ; i < N ; i++ )
      fscanf(f1,"%d", &vec[i]);

  for( int i = 0 ; i < N; i++ )
    for( int j = i; j < N; j++ )
	for( int  k = j; k < N; k++ ){
	   s[t].suma = vec[i] + vec[j] + vec[k];
	   s[t].a = vec[i];
	   s[t].b = vec[j];
	   s[t].c = vec[k];
	   t++;
	}
  printf("\n");	
  for( int i = 0 ; i < t; i++ )
    printf("%d ", s[i].suma );
  sort( s, s + t, comp);
  printf("\n");
  for( int i = 0 ; i < t; i++ )
    printf("%d ", s[i].suma );
  solutie( t - 1, f2 ); 
   
   
   
   fclose(f1);
   fclose(f2);
   return 0;
}