Cod sursa(job #2621708)

Utilizator AokijiAlex M Aokiji Data 30 mai 2020 17:47:41
Problema Loto Scor 85
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.57 kb
#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++)
            {
                int care1 = Exista(numere[i] + numere[j]+ numere[k]);
                int care2 = Exista(s - numere[i] - numere[j] - numere[k]);
                if (care1 != -1 && care2 != -1)
                {
                    out << val1[care1] << " " << val2[care1] << " " << val3[care1] << " " << val1[care2] << " " << val2[care2] << " " << val3[care2];
                    return 0;
                }
            }
        }
    }
    out << "-1";
    return 0;
}