Pagini recente » Cod sursa (job #347133) | Cod sursa (job #883311) | Cod sursa (job #2784937) | Cod sursa (job #7993) | Cod sursa (job #2745284)
#include<iostream>
#include<fstream>
#include<unordered_map>
using namespace std;
ifstream f("loto.in");
ofstream g("loto.out");
struct valori
{
int a, b, c;
};
bool ok = 0;
int N, S, v[101], suma;
unordered_map <int, valori> h;
int main()
{
valori t; // cream o alta variabila de tip valori, t
f>>N>>S;//citim cate nr avem si suma aleasa de Gigel
for(int i = 0; i < N; i++)
{
f>>v[i]; // citim nr de pe urmatoarea linie si le introducem in vectorul v
}
for(int i = 0; i < N; i++)
{
for(int j = i; j < N; j++)
{
for(int k = j; k < N; k++)
{
suma = v[i] + v[j] + v[k]; // cream toate combinatiile pentru suma a numerelor
if(S > suma) //daca S depaseste suma obtinuta de noi prin combinatii
{
t.a = v[i]; // introducem valorile numerelor in @tuplul@ creat
t.b = v[j];
t.c = v[k];
h[suma] = t; // introd in map valorile din tuplu
}
if((S > suma) && (h.find(S - suma) != h.end())) // daca suma noastra este mai mica decat S-ul lui Gigel, dar putem sa atingem S-ul cu elementele din map
{
g<<v[i]<<" "<<v[j]<<" "<<v[k]<<" ";// afisam valorile
g<<h[S-suma].a<<" "<<h[S-suma].b<<" "<<h[S-suma].c;// afisam completarea de valori gasite in map
ok = 1; // pb are solutie
i=N+5; // iesim din for
j=N+5;
k=N+5;
}
}
}
}
if(ok==0)
{
g<<"-1";
}
return 0;
}