Cod sursa(job #2588992)

Utilizator Ioan_AnghelIoan Anghel Ioan_Anghel Data 25 martie 2020 17:12:14
Problema Loto Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("loto.in");
ofstream out("loto.out");

const int N = 107, M = 666019;
int S, v[N], lst[N], urm[N], val[N], nr;

bool apartine(int x)
{
    int c = x % M;
    for(int p = lst[c]; p != 0; p = urm[p]){
        if(val[p] == x){
            return true;
        }
    }
    return false;
}

void adauga(int x)
{
    int c = x % M;
    if(apartine(x)){
        return;
    }
    val[++nr] = x;
    urm[nr] = lst[c];
    lst[c] = nr;
}

int main()
{
    bool ok = 0;
    int n, i = 0;
    in >> n >> S;
    for(int i = 1; i <= n; i++){
        in >> v[i];
    }
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= n; j++){
            for(int k = 1; k <= n; k++){
                adauga(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(S - (v[i] + v[j] + v[k]) >= 0 && apartine(S - (v[i] + v[j] + v[k]))){
                    S -= (v[i] + v[j] + v[k]);
                    out << 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){
                                    out << v[i] << " " << v[j] << " " << v[k];
                                    return 0;
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    out << -1;

    return 0;
}