Pagini recente » Cod sursa (job #588331) | Cod sursa (job #2334356) | Cod sursa (job #416263) | Cod sursa (job #2069672) | Cod sursa (job #2439114)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("loto.in");
ofstream fout("loto.out");
int n, z;
long long s, v[107];
const int p = 666013;
vector <int> H[p + 3];
struct triplet
{
long long nr1, nr2, nr3, suma;
}sum[1000001];
int h(int x)
{
return x % p;
}
int cauta(int x)
{
int r = h(x);
for (int i = 0; i < H[r].size(); ++i)
{
if (H[r][i] == x)
{
return i;
}
}
return -1;
}
void adauga(int x)
{
int r = h(x);
if (cauta(x) == -1)
{
H[r].push_back(x);
}
}
void Read()
{
fin >> n >> s;
for (int i = 1; i <= n; ++i)
{
fin >> v[i];
}
for (int i = 1; i <= n; ++i)
{
for (int j = i; j <= n; ++j)
{
for (int k = j; k <= n; ++k)
{
sum[++z] = {v[i], v[j], v[k], v[i] + v[j] + v[k]};
adauga(sum[z].suma);
}
}
}
}
void Solve()
{
long long sum1 = -1, sum2 = -1;
for (int i = 1; i <= z; ++i)
{
long long s2 = s - sum[i].suma;
if (cauta(s2) != -1)
{
sum1 = sum[i].suma;
sum2 = s2;
break;
}
}
if (sum2 == -1)
{
fout << -1;
return;
}
long long v[6], c = 0;
for (int i = 1; i <= z; ++i)
{
if (sum[i].suma == sum1)
{
v[c++] = sum[i].nr1;
v[c++] = sum[i].nr2;
v[c++] = sum[i].nr3;
}
if (sum[i].suma == sum2)
{
v[c++] = sum[i].nr1;
v[c++] = sum[i].nr2;
v[c++] = sum[i].nr3;
}
}
sort(v, v + c);
for (int i = 0; i < c; ++i)
{
fout << v[i] << " ";
}
}
int main()
{
Read();
Solve();
fin.close();
fout.close();
return 0;
}