Pagini recente » Cod sursa (job #2770370) | Cod sursa (job #2779311) | Cod sursa (job #2661223) | Cod sursa (job #3160073) | Cod sursa (job #2760148)
#include <fstream>
using namespace std;
const int K = 666019;
const int Nmax = 1e6 + 1;
int a[101], val[Nmax], urm[Nmax], lst[K], nr;
bool exista(int x)
{
int categoria = x % K;
int p = lst[categoria];
while (p != 0)
{
if (val[p] == x)
{
return true;
}
p = urm[p];
}
return false;
}
void adauga(int x)
{
if (exista(x))
{
return;
}
val[++nr] = x;
int categoria = x % K;
urm[nr] = lst[categoria];
lst[categoria] = nr;
}
int main()
{
ifstream fin("loto.in");
ofstream fout("loto.out");
int n, s;
fin >> n >> s;
for (int i = 0; i < n; i++)
{
fin >> a[i];
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
for (int k = 0; k < n; k++)
{
adauga(a[i] + a[j] + a[k]);
}
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
for (int k = 0; k < n; k++)
{
if (a[i] + a[j] + a[k] <= s)
{
if (exista(s - a[i] - a[j] - a[k]))
{
fout << a[i] << " " << a[j] << " " << a[k] << " ";
for (int x = 0; x < n; x++)
{
for (int y = 0; y < n; y++)
{
for (int z = 0; z < n; z++)
{
if (a[x] + a[y] + a[z] == s - a[i] - a[j] - a[k])
{
fout << a[x] << " " << a[y] << " " << a[z];
return 0;
}
}
}
}
}
}
}
}
}
fout << "-1";
return 0;
}