Cod sursa(job #1288853)

Utilizator ArmandNMArmand Nicolicioiu ArmandNM Data 9 decembrie 2014 09:11:48
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.62 kb
#include <fstream>
#include <vector>

const int NMAX = 105;
const int HMAX = 666013;


using namespace std;
ifstream f("loto.in");
ofstream g("loto.out");

struct hashy
{
    int nr1;
    int nr2;
    int nr3;
};

int N,S,v[NMAX];
vector <hashy> HH[HMAX+5];

int main()
{
    f >> N >> S;

    for (int i = 1; i <= N; ++i)
    {
        f >> v[i];
    }

    for (int i = 1; i <= N; ++i)
    {
        for (int j = i; j <= N; ++j)
        {
            for (int k = j; k <= N; ++k)
            {
                int key = (v[i]+v[j]+v[k]) % HMAX;
                hashy element;
                element.nr1 = v[i];
                element.nr2 = v[j];
                element.nr3 = v[k];
                HH[key].push_back(element);
            }
        }
    }

    for (int i = 1; i <= N; ++i)
    {
        for (int j = i; j <= N; ++j)
        {
            for (int k = j; k <= N; ++k)
            {
                int sum = S - (v[i]+v[j]+v[k]);
                if (sum >= 0)
                {
                    int key = sum % HMAX;
                    for (int it = 0 ; it < HH[key].size(); ++it)
                    {
                        if (HH[key][it].nr1 + HH[key][it].nr2 + HH[key][it].nr3 == sum)
                        {
                            g << v[i] << " " << v[j] << " " << v[k] << " " << HH[key][it].nr1 << " " << HH[key][it].nr2 << " " << HH[key][it].nr3;
                            return 0;
                        }
                    }
                }
            }
        }
    }

    g << "-1";

    f.close();
    g.close();
    return 0;
}