Pagini recente » Cod sursa (job #504227) | Cod sursa (job #928877) | Cod sursa (job #871546) | Cod sursa (job #1607601) | Cod sursa (job #2743293)
#include <iostream>
#include <fstream>
#include <unordered_map>
using namespace std;
ifstream fin("loto.in");
ofstream fout("loto.out");
struct num {int a, b, c;}; ///triplete din care obtinem jumatate de suma
unordered_map<int, num> sum; ///dict de forma suma: triplete cu care obt suma
int v[105]; ///numerele avute la dispozitie
int main()
{
int N, S;
fin >> N >> S;
for (int i = 0; i < N; ++i) fin >> v[i];
for (int i = 0; i < N; ++i)
{
for (int j = i; j < N; ++j) ///numerele se pot repeta (de aceea incepem de la i)
{
for (int k = j; k < N; ++k)
{
num n;
n.a = v[i], n.b = v[j], n.c = v[k]; ///un triplet
int s = n.a + n.b + n.c; ///jumatatea obt din triplet
sum[s] = n;
if (sum.find(S - s) != sum.end()) ///cautam daca avem complement pentru suma data
{
fout << sum[s].a << ' ' << sum[s].b << ' ' << sum[s].c << ' '; ///afisam tripletele sumei curente
fout << sum[S - s].a << ' ' << sum[S - s].b << ' ' << sum[S - s].c; ///afisam tripletele sumei complementare
return 0;
}
}
}
}
fout << -1; ///nu am gasit suma
return 0;
}