Cod sursa(job #1488186)

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

using namespace std;

const int Nmax = 110;

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

map < int  , vector < char > > Hash;
vector < char > mask , aux;

void solve(bool mode)
{
    int i , j , k;
    mask = vector < char > (n + 1 , 0);
    for (i = 1 ; i <= n; ++i)
    {
        mask[i]++;
        for (j = 1; j <= n; ++j)
        {
            mask[j]++;
            for (k = 1; k <= n; ++k)
            {
                mask[k]++;
                int sum = a[i] + a[j] + a[k];
                if (!mode && Hash[sum].empty())
                    Hash[sum] = mask;
                else if (mode)
                {
                    if (!Hash[s-sum].empty())
                    {
                        aux = Hash[s-sum];
                        printf("%d %d %d", a[i] , a[j] , a[k]);
                        for (i = 1; i <= n; ++i)
                            for (j = 1; j <= aux[i]; ++j)
                                printf(" %d", a[i]);
                        printf("\n");
                        return;
                    }
                }
                mask[k]--;
            }
            mask[j]--;
        }
        mask[i]--;
    }

    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;
}