Cod sursa(job #1553475)

Utilizator pulseOvidiu Giorgi pulse Data 19 decembrie 2015 22:17:30
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

const int MOD = 666013;
int N, S;
int a[105];
struct cell
{
    int s, x, y, z;
};
vector<cell> H[MOD];

bool inHash(int x)
{
    int pos = x % MOD;
    for (vector<cell>::iterator it = H[x].begin(); it != H[x].end(); ++it)
        if (it->s == x) return 1;
    return 0;
}

int main()
{
    fin >> N >> S;
    for (int i = 1; i <= N; ++i)
        fin >> a[i];

    for (int i = 1; i <= N; ++i)
    {
        for (int j = 1; j <= N; ++j)
        {
            for (int k = 1; k <= N; ++k)
            {
                int sum = a[i] + a[j] + a[k];
                if (!inHash(sum))
                {
                    cell elem;
                    elem.s = sum;
                    elem.x = i;
                    elem.y = j;
                    elem.z = k;
                    H[sum % MOD].push_back(elem);
                }
            }
        }
    }

    for (int i = 1; i <= N; ++i)
    {
        for (int j = 1; j <= N; ++j)
        {
            for (int k = 1; k <= N; ++k)
            {
                int sum = S - a[i] - a[j] - a[k];
                int x = sum % MOD;
                for (vector<cell>::iterator it = H[x].begin(); it != H[x].end(); ++it)
                {
                    if (it->s == sum)
                    {
                        fout << a[i] << ' ' << a[j] << ' ' << a[k] << ' ' << it->x << ' ' << it->y << ' ' << it->z;
                        return 0;
                    }
                }
            }
        }
    }

    fout << -1;

    return 0;
}