Cod sursa(job #2223317)

Utilizator Asgari_ArminArmin Asgari Asgari_Armin Data 19 iulie 2018 18:45:40
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <cstdio>
#include <iostream>
#include <algorithm>

using namespace std;

struct abc {
  int suma;
  int nr1 , nr2 , nr3;
};

abc v [ 1000005 ];
int f [ 105 ];

int binary_search1 ( int a, int b ) {
  int st , dr , med;
  st = 0;
  dr = b;
  while ( st <= dr ) {
    med = ( st + dr ) / 2;
    if ( v [ med ] . suma == a )
      return med;
    else if ( v [ med ] . suma > a )
      dr = med - 1;
    else
      st = med + 1;
  }
  return -1;
}

bool cmp1 ( abc a , abc b ){
  return a . suma < b . suma;
}

int main()
{
    freopen ( "loto.in" , "r" , stdin );
    freopen ( "loto.out" , "w" , stdout );
    int n , i , s , m , x , j;
    cin >> n >> s;
    for ( i = 0; i < n; i++ )
      cin >> f [ i ];
    j = 0;
    for ( i = 0; i < n; i++ ){
      for ( m = i; m < n; m++ ){
        for ( x = m; x < n; x++ ){
          v [ j ] . suma = f [ i ] + f [ m ] + f [ x ];
          v [ j ] . nr1 = f [ i ];
          v [ j ] . nr2 = f [ m ];
          v [ j ] . nr3 = f [ x ];
          j++;
        }
      }
    }
    sort ( v , v + j , cmp1 );
    for ( x = 0; x < j; x++ ){
      i = s - v [ x ] . suma;
      m = binary_search1( i , j );
      if ( m != -1 ) {
        cout << v [ x ] . nr1 << " " << v [ x ] . nr2 << " " << v [ x ] . nr3 << " " << v [ m ] . nr1 << " " << v [ m ] . nr2 << " " << v [ m ] . nr3;
        exit ( 0 );
      }
    }
    cout << "-1";
    return 0;
}