Cod sursa(job #2893117)

Utilizator TindecheTindeche Alexandru Tindeche Data 25 aprilie 2022 12:07:10
Problema Loto Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.91 kb
#include <string.h>
#include <unordered_set>
#include <fstream>
#include <iostream>

# define nmax 100

using namespace std;

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


/*
 * Ideea mea de rezolvare:
 * Citesc vectorul si fac toate sumele de 3 elemente posibile. Apoi parcurg din nou vectorul de valori
 * si incerc sa gasesc o alta suma de 3 elemente care adunata cu una din sumele deja calculate
 * sa dea suma S ceruta. Daca reusesc sa o gasesc, atunci afisez vectorul. Daca in vectorul de sume
 * nu gasesc 2 sume de 3 elemente care adunate sa dea S, atunci afisez -1.
 */

int n, S;
int v[nmax];
unordered_set <int> sume; // In acest set vom calcula toate sumele posibile de 3 elemente

int afisare(int x)
{
    int i, j, k;
    for(i = 0; i < n; ++i)
        for(j = 0; j < n; ++j)
            for(k = 0; k < n; ++k)
            {
                if(v[i] + v[j] + v[k] == x)
                {
                    fout << v[i] << ' ' << v[j] << ' ' << v[k] << ' ';
                    return 0;
                }

            }
}

int main ()
{
    int i, j, k; // Declararea indicilor pentru for
    // Citirea datelor de intrare:
    fin >> n;
    fin >> S;
    for(i = 0; i < n; ++i)
        fin >> v[i];

    // Calculam toate sumele posibile de 3 elemente:
    int s;
    for(i = 0; i < n; ++i)
        for(j = 0; j < n; ++j)
            for(k = 0; k < n; ++k)
            {
                s = v[i] + v[j] + v[k];
                if(sume.find(S-s) != sume.end())  // Totodata cautam doua sume de 3 elemente care adunate sa faca S:
                {
                    fout << v[i] << ' ' << v[j] << ' ' << v[k] << ' ';
                    afisare(S-s);
                    return 0;
                }
                sume.insert(s);
            }


    if(sume.find(S-s) != sume.end())
    {
        fout << v[i] << ' ' << v[j] << ' ' << v[k] << ' ';
        afisare(S-s);
        return 0;
    }
    fout << "-1";
    return 0;
}