Cod sursa(job #856902)

Utilizator blechereyalBlecher Eyal blechereyal Data 17 ianuarie 2013 06:09:17
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include<cstdio>
#include<vector>
#include<ext/hash_set>

using namespace std;
using namespace __gnu_cxx;

#define Nmax 101

hash_set<int> H;
int N, S, V[Nmax];
vector<int> sol;

int main() {

    freopen("loto.in","r",stdin);
    freopen("loto.out","w",stdout);

    int i, j, k, sum;
    scanf("%d %d",&N,&S);
    for(i=1; i<=N; i++)
        scanf("%d",&V[i]);

    for(i=1; i<=N; i++)
        for(j=1; j<=N; j++)
            for(k=1; k<=N; k++) {
                sum = V[i] + V[j] + V[k];
                if(sum < S)
                    H.insert(sum);
            }

    sum = -1;
    for(i=1; i<=N; i++)
        for(j=1; j<=N; j++)
            for(k=1; k<=N; k++) {
                sum = V[i] + V[j] + V[k];
                if(H.find(S-sum) != H.end()) {
                    sol.push_back(V[i]);
                    sol.push_back(V[j]);
                    sol.push_back(V[k]);
                    //printf("%d %d %d",V[i],V[j],V[k]);
                    S-=sum;
                    i = j = k = N+1;
                }
            }

    for(i=1; i<=N; i++)
        for(j=1; j<=N; j++)
            for(k=1; k<=N; k++) {
                sum = V[i] + V[j] + V[k];
                if(S == sum) {
                    printf("%d %d %d ",V[i],V[j],V[k]);
                    for(vector<int>:: iterator it=sol.begin(); it!=sol.end(); ++it)
                        printf("%d ",*it);
                    return 0;
                }
            }
    printf("-1\n");

    return 0;
}