Cod sursa(job #1294876)

Utilizator RaduVisanRadu Visan RaduVisan Data 18 decembrie 2014 13:28:14
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
#include <cstdio>
#include <vector>
using namespace std;

const int NMAX = 110, MOD = 666013;

int N, V[NMAX], S;
vector<int> Hash[MOD];

void Insert(int X)
{
    int Key = X % MOD;
    for(vector<int> :: iterator it = Hash[Key].begin(); it != Hash[Key].end(); ++ it)
        if(*it == X)
            return ;
    Hash[Key].push_back(X);
}

bool Check(int X)
{
    if(X < 0) return 0;
    int Key = X % MOD;
    for(vector<int> :: iterator it = Hash[Key].begin(); it != Hash[Key].end(); ++ it)
        if(*it == X)
            return 1;
    return 0;
}

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

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

    for(int i = 1; i <= N; ++ i)
        for(int j = 1; j <= N; ++ j)
            for(int k = 1; k <= N; ++ k)
                Insert(V[i] + V[j] + V[k]);

    for(int i = 1; i <= N; ++ i)
        for(int j = 1; j <= N; ++ j)
            for(int k = 1; k <= N; ++ k)
            {
                int CurrentSum = V[i] + V[j] + V[k];
                if(Check(S - CurrentSum))
                {
                    for(int ii = 1; ii <= N; ++ ii)
                        for(int jj = 1; jj <= N; ++ jj)
                            for(int kk = 1; kk <= N; ++ kk)
                                if(V[i] + V[j] + V[k] + V[ii] + V[jj] + V[kk] == S)
                                {
                                    printf("%i %i %i %i %i %i\n", V[i], V[j], V[k], V[ii], V[jj], V[kk]);
                                    return 0;
                                }
                }
            }

    printf("-1\n");
}