Cod sursa(job #2211454)

Utilizator skoda888Alexandru Robert skoda888 Data 10 iunie 2018 13:06:44
Problema Loto Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.39 kb

#include <iostream>
#include <fstream>
#include <set>

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

struct Lista_Simpla{
    long s;
    long x;
    long y;
    long z;
    Lista_Simpla* adr_urm;
};

int main()
{
    int stiva[6];
    int N;
    int S;
    in >> N >> S;

    std::set<long> numere;
    long x;
    for(int i = 1; i <= N; ++i){
        in >> x;
        numere.insert(x);
    }

    Lista_Simpla* sume_cap = new Lista_Simpla;
    Lista_Simpla* sume_iterator = sume_cap;
    std::set<long>::iterator i = numere.begin();

    //introducerea primului element in listra de sume
    sume_iterator->s = 3 * *i;
    sume_iterator->x = *i;
    sume_iterator->y = *i;
    sume_iterator->z = *i;
    sume_iterator->adr_urm = NULL;

    //restul elementelor: in ordine crescatoare si fara elemente repetate
    for(std::set<long>::iterator i = numere.begin(); i != numere.end(); ++i)
    {
        for(std::set<long>::iterator j = numere.begin(); j != numere.end(); ++j)
        {
            for(std::set<long>::iterator k = numere.begin(); k != numere.end(); ++k){

                long su = *i + *j + *k;
                int it = 1;
                sume_iterator = sume_cap;
                while(sume_iterator->adr_urm != NULL && su > sume_iterator->adr_urm->s){
                    sume_iterator = sume_iterator->adr_urm;
                }

                if(sume_iterator->adr_urm == NULL || su != sume_iterator->adr_urm->s){
                    Lista_Simpla* temp = new Lista_Simpla;
                    temp->s = su;
                    temp->x = *i;
                    temp->y = *j;
                    temp->z = *k;
                    temp->adr_urm = sume_iterator->adr_urm;
                    sume_iterator->adr_urm = temp;
                }
            }
        }
    }

    sume_cap = sume_cap->adr_urm;

    bool continua = true;
    for(Lista_Simpla* it1 = sume_cap; it1 != NULL && continua == true; it1 = it1->adr_urm){
        for(Lista_Simpla* it2 = it1; it2 != NULL && continua == true; it2 = it2->adr_urm){
            if(it1->s + it2->s == S){
                continua = false;
                out << it1->x << ' ' << it1->y << ' ' << it1->z << ' ';
                out << it2->x << ' ' << it2->y << ' ' << it2->z;
            }
        }
    }

    if(continua == true){
        out << -1;
    }
    return 0;
}