Pagini recente » Monitorul de evaluare | Istoria paginii runda/meesh/clasament | Cod sursa (job #2221330) | Autentificare | Cod sursa (job #2893117)
#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;
}