Cod sursa(job #1452247)

Utilizator ZenusTudor Costin Razvan Zenus Data 20 iunie 2015 14:08:15
Problema Loto Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <fstream>
#include <vector>
#include <iostream>

using namespace std;

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

const int MOD = 1117;
const int NSIZE = 100 + 10;

int x[NSIZE];
vector < pair < pair < int , int > , pair < int , int > > > iH[MOD];
int i , j , k , ii , jj , kk , crt , s , N;

void inH(int i,int j,int k)
{
    int crt = x[i] + x[j] + x[k];
    int line = crt % MOD;

    iH[line].push_back(make_pair(make_pair(crt,i),make_pair(j,k)));
}

bool findH(int s)
{
    int line = s % MOD;

    for (int i = 0 ; i < iH[line].size() ; ++i)
    if (iH[line][i].first.first == s)
    {
        ii = iH[line][i].first.second;
        jj = iH[line][i].second.first;
        kk = iH[line][i].second.second;
        return 1;
    }

    return 0;
}

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)
inH(i,j,k);

for (i = 1 ; i <= N ; ++i)
for (j = 1 ; j <= N ; ++j)
for (k = 1 ; k <= N ; ++k)
{
    crt = x[i] + x[j] + x[k];

    if (findH(s - crt))
    {
        fout << x[i] << " ";
        fout << x[j] << " ";
        fout << x[k] << " ";
        fout << x[ii] << " ";
        fout << x[jj] << " ";
        fout << x[kk] << '\n';

        return 0;
    }
}

fout << "-1" << '\n';

return 0;
}