Cod sursa(job #1305831)

Utilizator blackoddAxinie Razvan blackodd Data 30 decembrie 2014 11:03:32
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.82 kb
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstdlib>
#include <cstring>

#define DIM 105
#define DIM1 666013

using namespace std;

int n , v[DIM];
long long S;

vector <int>G[DIM1];

ifstream fin("loto.in");
ofstream fout("loto.out");

int s;

int _search( int x )
{

    int k = x % DIM1;

    vector<int>:: iterator it;

    for( it = G[k].begin() ; it !=G[k].end() ; ++it )
        if( *it == x )
            return 1;
    return 0;

}

void add( int x )
{

    int k = x % DIM1;
    if( !_search(x) )
        G[k].push_back(x);

}

int main()
{

    fin >> n >> S;

    for( int i = 1;  i<=n ; i++)
        fin >> v[i];

    sort( v + 1 , v + n + 1 );

    for( int i = 1;  i <= n ; i++)
        for( int j = i  ; j <= n ; j++)
            for( int k = j ; k <= n ; k++)
                {
                    int p = 0;
                    p = v[i] + v[j] + v[k];
                    add(p);
                }

    for( int i = 1 ; i <= n ; i++)
        for( int j = i ; j <= n ; j++)
            for( int k = j ; k <= n ; k++)
                {

                    s = S - v[i] - v[j] - v[k];
                    if( s >= 0 )
                        if( _search(s))
                        {

                            for( int x = 1 ; x <= n ; x++)
                                for( int y = x ; y <= n ; y++)
                                    for( int z = y ; z <= n ; z++)
                                        if( v[x] + v[y] + v[z] == s )
                            {
                            fout << v[i] << " " << v[j] << " " << v[k] <<" " << v[x] << " " << v[y] << " " << v[z];
                            }
                        exit(0);

                        }

                }

    fout << -1;
    return 0;
}