Cod sursa(job #1322036)

Utilizator priestnoobFMI - Dan Nema priestnoob Data 19 ianuarie 2015 19:00:34
Problema Loto Scor 90
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I Marime 1.58 kb
#include<stdio.h>
#include<unordered_set>
#include<algorithm>

using namespace std;

#define nmax 101

unordered_set<int>h;
int v[nmax],n,s,g;

void citire()
{
    scanf("%d%d",&n,&s);
    for(int i=1;i<=n;++i) scanf("%d",&v[i]);
}

void solve()
{
    for(int i=1;i<=n;++i)
        for(int j=1;j<=n;++j)
            for(int k=1;k<=n;++k)
                if (h.find(v[i] + v[j] + v[k]) == h.end())
                {
                    h.insert(v[i] + v[j] + v[k]);
                }
    for(int i=1;i<=n;++i)
    {
        for(int j=1;j<=n;++j)
        {
            for(int k=1;k<=n;++k)
            {
                if (h.find(s - (v[i] + v[j] + v[k])) != h.end())
                {
                    printf("%d %d %d ",v[i],v[j],v[k]);
                    s -= v[i] + v[j] + v[k];
                    g = 1;
                    break;
                }
            }
            if(g) break;
        }
        if(g) break;
    }
    if(!g) printf("-1");
    else
    {
        g=0;
        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] == s)
                {
                    printf("%d %d %d",v[i],v[j],v[k]);
                    s -= v[i] + v[j] + v[k];
                    g = 1;
                    break;
                }
                if(g) break;
            }
            if(g) break;
        }
    }
}

int main()
{
    freopen("loto.in","r",stdin);
    freopen("loto.out","w",stdout);
    citire();
    solve();
}