Cod sursa(job #2580917)

Utilizator AndreeaGherghescuAndreea Gherghescu AndreeaGherghescu Data 14 martie 2020 13:09:12
Problema Loto Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.62 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int N=101;
const int K=666019;
int v[N],lst[K],val[N],urm[N],nr,n;

bool apartine (int x)
{
    int c=x%K;
    for (int p=lst[c];p!=0;p=urm[p])
    {
        if (val[p]==x)
            return true;
    }
    return false;
}
void adauga (int x)
{
    if (apartine(x))
        return;
    int c=x%K;
    val[++nr]=x;
    urm[nr]=lst[c];
    lst[c]=nr;
}
bool fnd (int x)
{
    int c=x%K;
    for (int p=lst[c];p!=0;p=urm[p])
    {
        if (val[p]==x)
            return true;
    }
    return false;
}
void refac (int x)
{
    for (int i=1;i<=n;i++)
        for (int j=1;j<=n;j++)
            for (int k=1;k<=n;k++)
            {
                if (v[i]+v[j]+v[k]==x)
                {
                    out<<v[i]<<' '<<v[j]<<' '<<v[k];
                    return;
                }
            }
}
int main()
{
    int x,s,ns=0;
    in>>n>>s;
    for (int i=1;i<=n;i++)
    {
        in>>v[i];
    }
    for (int i=1;i<=n;i++)
        for (int j=1;j<=n;j++)
            for (int k=1;k<=n;k++)
            {
                adauga (v[i]+v[j]+v[k]);
            }
    //bool t=true;
    for (int i=1;i<=n;i++)
        for (int j=1;j<=n;j++)
            for (int k=1;k<=n;k++)
            {
                if (fnd (s-v[i]-v[j]-v[k]))
                {
                    out<<v[i]<<' '<<v[j]<<' '<<v[k]<<' ';
                    refac (s-v[i]-v[j]-v[k]);
                    return 0;
                }
            }
    out<<-1;
    return 0;
}