Pagini recente » Cod sursa (job #1682762) | Cod sursa (job #1203985) | Cod sursa (job #2199537) | Cod sursa (job #587360) | Cod sursa (job #2747567)
#include <iostream>
#include <fstream>
#include <vector>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
std::ifstream f("loto.in");
std::ofstream g("loto.out");
int n, sum;
//set cu toate sumele de cate 3 numere
std::unordered_set<int> sume;
//map cu suma de 3 posibila si pozitiile celor 3 in vector
std::unordered_map<int, std::tuple<int, int, int> > poz;
std::vector<int> v;
int main() {
f>>n>>sum;
for( int i=0 ; i<n ; i++)
{
int x;
f>>x;
v.push_back(x);
}
for(int i=0 ; i<n ; i++ )
for(int j=0 ; j<n ; j++ )
for(int k=0 ; k<n ; k++ ){
sume.insert( v[i ]+ v[j] + v[k] ); //retinem ca suma celor 3 se poate obtine
poz[v[i] + v[j] + v[k]] = std::make_tuple( i, j, k ); //retinem pozitiile numerelor
}
for(int i=0 ; i<n ; i++ )
for(int j=0 ; j<n ; j++ )
for(int k=0 ; k<n ; k++ ) {
int suma_partiala = v[i] + v[j] + v[k];
if( sume.find(sum - suma_partiala) != sume.end()) //daca se poate obtine restul pana la sum
{
int x = std::get<0>(poz[ sum - suma_partiala ]);
int y = std::get<1>(poz[ sum - suma_partiala ]);
int z = std::get<2>(poz[ sum - suma_partiala ]);
g<<v[i]<<" "<<v[j]<<" "<<v[k]<<" "<<v[x]<<" "<<v[y]<<" "<<v[z];
return 0;
}
}
g<<"-1";
return 0;
}