Cod sursa(job #792024)

Utilizator idainetJohn Doe idainet Data 26 septembrie 2012 11:44:41
Problema Loto Scor 0
Compilator cpp Status done
Runda asem-etapa1 Marime 1.35 kb
//
//  main.cpp
//  a1
//
//  Created by abc on 9/20/12.
//  Copyright (c) 2012 abc. All rights reserved.
//

# include <iostream>
# include <cstdio>
# include <cstdlib>
# include <iomanip>
# include <cmath>
# include <map>
# include <vector>
# include <set>

using namespace std;

# define ISALPHA(Q) (('a' <= Q && Q <= 'z') || ('A' <= Q && Q <= 'Z'))
# define ISDIGIT(a) ('0' <= a  && a <= '9')
# define TODIGIT(a) (a - '0')

typedef unsigned char U8;
typedef long long LONG;

void init()
{
    freopen("loto.in", "r", stdin);
    freopen("loto.out", "w", stdout);
}

template <typename T> void read(vector<T> &vec)
{
    for(int i=0; i<vec.size(); ++i) {
        cin >> vec[i];
    }
}

int sol[6];

bool rec(int n, int s, const vector<int> &vec, int p)
{
    if (n == 0) {
        return (s == 0);
    }
    else {
        bool found = false;
        for(int i=p; !found && i<vec.size() && s - vec[i] >= 0; ++i)
        {
            sol[6-n] = vec[i];
            found |= rec(n-1, s - vec[i], vec, i);
        }
        return found;
    }
}

int main(int argc, const char * argv[])
{
    init();
    
    int N, S; cin >> N >> S;
    vector<int> vec(N); read(vec);
    sort(vec.rbegin(), vec.rend());
    
    if (rec(6, S, vec, 0)) {
        for(int i=0; i<6; ++i) {
            cout << sol[i] << " ";
        }
    }
    else {
        cout << -1;
    }
    
    return 0;
}