Pagini recente » Cod sursa (job #531912) | Cod sursa (job #1610235) | Cod sursa (job #1218238) | Cod sursa (job #1234121) | Cod sursa (job #2746508)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("loto.in");
ofstream fout("loto.out");
unordered_map<int, tuple<int,int,int>> h; //memoram elemente de forma: suma(cheie) - termenii sumei,
//mai exact trei valori care insumeaza jumatate din suma
vector<int> numere; //numerele posibile
int main()
{
int N, S, x;
fin>>N>>S;
for(int i = 0; i < N; i++)
{
int x;
fin>>x;
numere.push_back(x);
}
for(int i = 0; i < N ; i++)
{
for(int j = i; j < N; j++)
{
for(int k = i; k < N; k++) //incep de la i, numerele nu-s distincte
{ tuple<int,int,int> temp;
temp = make_tuple(numere[i],numere[j],numere[k]); //jumatatea obtinuta cu cele 3 numere
int jumate = get<0>(temp) + get<1>(temp) + get<2>(temp);
h[jumate] = temp;
if(h.find(S - jumate) != h.end()) //cautam o alta jumatate cu care putem ajunge la suma
{
fout<<get<0>(h[jumate])<<" "<<get<1>(h[jumate])<<" "<<get<2>(h[jumate])<<" "; //elementele primei jumatati
fout<<get<0>(h[S - jumate])<<" "<<get<1>(h[S - jumate])<<" "<<get<2>(h[S - jumate])<<" "; //elementele celei de a 2 a jumatati
return 0;
}
}
}
}
fout<<-1;
return 0;
}