Cod sursa(job #1488191)

Utilizator AlexNiuclaeNiculae Alexandru Vlad AlexNiuclae Data 18 septembrie 2015 09:40:28
Problema Loto Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <bits/stdc++.h>

#define F first
#define S second
#define mp make_pair

using namespace std;

const int Nmax = 110;

int n , s , i;
int a[Nmax];

unordered_map < int , bool > Hash;
vector < pair < int , pair < int , pair < int , int > > > > v;

void solve(bool mode)
{
    int i , j , k;

    for (i = 1 ; i <= n; ++i)
        for (j = 1; j <= n; ++j)
            for (k = 1; k <= n; ++k)
            {

                int sum = a[i] + a[j] + a[k];
                if (!mode && Hash[sum] == 0)
                    Hash[sum] = 1,
                    v.push_back({sum , {a[i] , {a[j] , a[k]}}});
                else if (mode)
                {
                    if (Hash[s-sum] == 1)
                    {
                        int it = lower_bound(v.begin() , v.end() , mp(s-sum , mp(0 , mp(0 , 0)))) - v.begin();
                        printf("%d %d %d %d %d %d\n", a[i] , a[j] , a[k], v[it].S.F , v[it].S.S.F , v[it].S.S.S);
                        return;
                    }
                }
            }

    if (mode) printf("-1\n");
}

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

    scanf("%d %d", &n, &s);

    for (i = 1; i <= n; ++i)
        scanf("%d", a + i);

    solve(0);
    solve(1);

    return 0;
}