Cod sursa(job #1767399)

Utilizator ionutpop118Pop Ioan Cristian ionutpop118 Data 28 septembrie 2016 22:58:15
Problema Loto Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <cstdio>
#include <vector>
using namespace std;

const int mod = 666013;
vector <int> g[mod];
int v[105];

void update(int x)
{
    g[x % mod].push_back(x);
}

bool query(int x)
{
    int poz = x % mod;
    for (int i = 0; i < g[poz].size(); ++i)
        if (g[poz][i] == x)
            return 1;
    return 0;
}

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

    scanf ("%d %d", &n, &x);
    for (int i = 1; i <= n; ++i)
        scanf("%d", &v[i]);

    for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= n; ++j)
            for (int k = 1; k <= n; ++k)
                update(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)
                if (query(x - v[i] - v[j] - v[k]) == 1)
                {
                    sum = x - v[i] - v[j] - v[k];
                    for (int i1 = 1; i1 <= n; ++i1)
                        for (int j1 = 1; j1 <= n; ++j1)
                            for (int k1 = 1; k1 <= n; ++k1)
                                if (v[i1] + v[j1] + v[k1] == sum)
                                {
                                    printf("%d %d %d %d %d %d\n", v[i], v[i1], v[j], v[j1], v[k], v[k1]);
                                    return 0;
                                }

                }
    printf("-1\n");
    return 0;
}