Pagini recente » Cod sursa (job #669351) | Cod sursa (job #14602) | Cod sursa (job #2835424) | Cod sursa (job #2174932) | Cod sursa (job #2746358)
#include <iostream>
#include <vector>
#include <unordered_map>
#include <fstream>
using namespace std;
ifstream fin("loto.in");
ofstream fout("loto.out");
int n,s,i,j,k,x,curr_sum;
vector<int> nbrs;
unordered_map<int, vector<int> > Hashm;
int main(){
fin>>n>>s;
for(i = 0; i < n; i++){
fin>>x;
nbrs.push_back(x);
}
for(i = 0; i < nbrs.size(); i++){
for(j = i ; j < nbrs.size(); j++){
for(k = j; k < nbrs.size(); k++){ //backtracking pt toate combinatiile de n numere
curr_sum = nbrs[i] + nbrs[j] + nbrs[k]; //adunam combinatia curenta
Hashm[curr_sum] = {nbrs[i],nbrs[j],nbrs[k]}; //si punem in hash numerele corespunzatoare combinatiei curente
if(Hashm.find(s-curr_sum) != Hashm.end()){ //daca gasim complementara sumei curente in hash
//afisam termenii ambelor sume deoarece acestia dau in total suma ceruta
fout<<Hashm[curr_sum][0]<<" "<<Hashm[curr_sum][1]<<" "<<Hashm[curr_sum][2]<<" "<<Hashm[s-curr_sum][0]<<" "<<Hashm[s-curr_sum][1]<<" "<<Hashm[s-curr_sum][2];
return 0; //una dintre soluii a fost gasita deci putem iesi din main
}
}
}
}
fout<<-1; // nu au fost gasite solutii deci este afisat -1
fin.close();
fout.close();
return 0;
}