Pagini recente » Cod sursa (job #1665250) | Cod sursa (job #1265401) | Cod sursa (job #1840560) | Cod sursa (job #967388) | Cod sursa (job #2736792)
#include <iostream>
#include <fstream>
#include <vector>
#include <tuple>
#include <utility>
using namespace std;
const int MOD = 666013;
void insert(int x, int y, int z, vector<vector<tuple<int, int, int>>>& v)
{
int sumaCurenta = (x + y + z) % MOD;
bool isThere = false;
for(auto &elem: v[sumaCurenta]) {
if (elem == make_tuple(x, y, z))
isThere = true;
}
if(!isThere)
{
v[sumaCurenta].push_back(make_tuple(x, y, z));
}
}
tuple<int, int, int> find(int sum, vector<vector<tuple<int, int, int>>>& v)
{
int sumaCurenta = sum % MOD;
if(v[sumaCurenta].empty())
return make_tuple(-1, -1, -1);
return make_tuple(get<0>(v[sumaCurenta][0]), get<1>(v[sumaCurenta][0]), get<2>(v[sumaCurenta][0]));
}
int main() {
ifstream fin("loto.in");
ofstream fout("loto.out");
vector<vector<tuple<int, int, int>>> hash(MOD);
vector<int> nr;
int N, S;
fin>>N>>S;
for(int i = 0; i < N; i ++){
int x;
fin>>x;
nr.push_back(x);
}
for(int a = 0; a < N; a ++)
for(int b = 0; b < N; b ++)
for(int c = 0; c < N; c ++) {
insert(nr[a], nr[b], nr[c], hash);
}
bool ok = false;
for(int d = 0; d < N; d ++)
for(int e = 0; e < N; e ++)
for (int f = 0; f < N; f++){
auto result = find(S - (nr[d] + nr[e] + nr[f]), hash);
if( result != make_tuple(-1, -1, -1)){
ok = true;
fout<<get<0>(result)<<" "
<<get<1>(result)<<" "
<<get<2>(result)<<" "
<<nr[d]<<" "<<nr[e]<<" "<<nr[f]<<"\n";
return 0;
}
}
if(!ok)
fout<<-1<<"\n";
fin.close();
fout.close();
return 0;
}