Cod sursa(job #2588878)

Utilizator minecraft3Vintila Valentin Ioan minecraft3 Data 25 martie 2020 15:52:54
Problema Loto Scor 65
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <bits/stdc++.h>

using namespace std;

#define N 105
#define K 10000019

int n, S, v[N], val[N*N*N], urm[N*N*N], nr;
int lst[K+5];

void add(int x) {
    val[++nr] = x;
    urm[nr] = lst[x % K];
    lst[x % K] = nr;
}

bool exist(int x) {
    for(int p = lst[x%K]; p; p = urm[p])
        if(x == val[p]) return true;
    return false;
}

int main() {
    ifstream fin("loto.in");
    ofstream fout("loto.out");

    fin >> n >> S;
    for(int i = 1; i <= n; ++i)
        fin >> v[i];

    for(int i = 1; i <= n; ++i)
        for(int j = 1; j <= n; ++j)
            for(int k = 1; k <= n; ++k)
                add(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(exist(S - (v[i]+v[j]+v[k]))) {
                    S -= (v[i]+v[j]+v[k]);
                    fout << 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(v[i]+v[j]+v[k] == S) {
                                    fout << v[i] << ' ' << v[j] << ' ' << v[k];
                                    return 0;
                                }
                }

    fout << "-1";
    return 0;
}