Cod sursa(job #1452263)

Utilizator ZenusTudor Costin Razvan Zenus Data 20 iunie 2015 14:25:32
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <fstream>
#include <bitset>
#include <iostream>

using namespace std;

ifstream fin("loto.in");
ofstream fout("loto.out");

const int VSIZE = 600000000 + 10;
const int NSIZE = 100000 + 10;

int x[NSIZE];
bitset < VSIZE > iH;
int i , j , k , exist , s , N;

int main()
{

fin >> N >> s;

for (i = 1 ; i <= N ; ++i)
fin >> x[i];

for (i = 1 ; i <= N ; ++i)
for (j = 1 ; j <= N ; ++j)
for (k = 1 ; k <= N ; ++k)
iH[x[i] + x[j] + x[k]] = true;

exist = -1;

for (i = 1 ; i <= N ; ++i)
for (j = 1 ; j <= N ; ++j)
for (k = 1 ; k <= N ; ++k)
if (x[i] + x[j] + x[k] <= s && iH[s - x[i] - x[j] - x[k]])
{
    exist = x[i] + x[j] + x[k];
    i = j = k = N + 1;
}

if (exist == -1)
{
    fout << "-1" << '\n';
    return 0;
}

for (i = 1 ; i <= N ; ++i)
for (j = 1 ; j <= N ; ++j)
for (k = 1 ; k <= N ; ++k)
if (x[i] + x[j] + x[k] == exist)
{
    fout << x[i] << " ";
    fout << x[j] << " ";
    fout << x[k] << " ";
    i = j = k = N + 1;
}

for (i = 1 ; i <= N ; ++i)
for (j = 1 ; j <= N ; ++j)
for (k = 1 ; k <= N ; ++k)
if (x[i] + x[j] + x[k] == s - exist)
{
    fout << x[i] << " ";
    fout << x[j] << " ";
    fout << x[k] << '\n';
    return 0;
}

return 0;
}