Pagini recente » Cod sursa (job #1256795) | Cod sursa (job #528638) | Cod sursa (job #2051777) | Cod sursa (job #1580436) | Cod sursa (job #2588980)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("loto.in");
ofstream out("loto.out");
const int dim = 1000005;
const int MOD = 666019;
int n,s,numere[dim];
int nr,lst[MOD],urm[dim],val[dim],val1[dim],val2[dim],val3[dim];
void Adauga(int x,int y,int z,int suma)
{
int c = suma%MOD;
val[++nr] = suma;
val1[nr] = x;
val2[nr] = y;
val3[nr] = z;
urm[nr] = lst[c];
lst[c] = nr;
}
int Exista(int suma)
{
int c = suma%MOD;
for (int p=lst[c]; p!=0; p=urm[p])
{
if (val[p] == suma) return p;
}
return -1;
}
int main()
{
in >> n >> s;
for (int i=1; i<=n; i++)
{
in >> numere[i];
}
for (int i=1; i<=n; i++)
{
for (int j=1; j<=n; j++)
{
for (int k=1; k<=n; k++)
{
Adauga(numere[i] , numere[j], numere[k], numere[i] + numere[j]+ numere[k]);
}
}
}
for (int i=1; i<=n; i++)
{
for (int j=1; j<=n; j++)
{
for (int k=1; k<=n; k++)
{
if (Exista(numere[i] + numere[j]+ numere[k]) != -1 && Exista(s - numere[i] - numere[j] - numere[k]) != -1)
{
int care1 = Exista(numere[i] + numere[j]+ numere[k]);
int care2 = Exista(s - numere[i] - numere[j] - numere[k]);
out << val1[care1] << " " << val2[care1] << " " << val3[care1] << " " << val1[care2] << " " << val2[care2] << " " << val3[care2];
return 0;
}
}
}
}
out << "-1";
return 0;
}