Cod sursa(job #1772771)

Utilizator vladdy47Bucur Vlad Andrei vladdy47 Data 6 octombrie 2016 23:48:12
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
# include <bits/stdc++.h>
# define MOD 666013

using namespace std;

const int Nmax =  105;

int n, s, i, j, k, i2, j2, k2, a[Nmax];
vector <int> H[MOD + 5];

bool Find(int x) {

   if (x <= 0) return false;
   int xx = x;
   x %= MOD;

   vector <int>:: iterator it;

  for (it = H[x].begin(); it != H[x].end(); ++it)
    if (*it == xx) return true;

  return false;
}

void add(int x) {

    if (Find(x)) return;
        else H[x % MOD].push_back(x);

}

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

    scanf("%d %d\n", &n, &s);

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


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

                    add(a[i] + a[j] + a[k]);

                    if ( Find(s - a[i] - a[j] - a[k]) ) {

                            printf("%d %d %d ", a[i], a[j], a[k]);

                            for (i2 = 1; i2 <= n; ++i2)
                                for (j2 = 1; j2 <= n; ++j2)
                                    for (k2 = 1; k2 <= n; ++k2)
                                        if (a[i2] + a[j2] + a[k2] == s - a[i] - a[j] - a[k]) {
                                            printf("%d %d %d\n", a[i2], a[j2], a[k2]);
                                            return 0;
                                        }
                    }
            }

    printf("-1\n");

    return 0;
}