Cod sursa(job #2209394)

Utilizator bisarenaBudai Istvan bisarena Data 3 iunie 2018 11:42:55
Problema Loto Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <iostream>
#include <fstream>
#include <cmath>
#include <algorithm>
using namespace std;

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

int n, S, T=0;

struct nr {
        int val;
        int cant=6;
    } a, b;

nr v[7], x[100];
bool cont=true;

int cmp(const void* a, const void* b)
   {
     nr* arg1 = (nr*) a;
     nr* arg2 = (nr*) b;
     if( arg1->val < arg2->val ) return -1;
     else if( arg1->val == arg2->val ) return 0;
     else return 1;
   }

bool accept(int p)
{
   bool b1=(v[p].cant>0 && p<=6);
   T=0;
   for (int i=1; i<=p; ++i) T=T+v[i].val;
   bool b2=(T<=S);
   return b1 && b2;
}

void Back(int i)
{
    for (int j=0; j<=5; j++)
    {
        v[i]=x[j];
        if (accept(i))
        {
            if (i<6 && cont) Back(i+1);
            else
            {
                if (T==S)
                    {
                        for (int k=1; k<=6; k++)
                            {
                                out << v[k].val << " ";
                            }
                        cont=false;
                    }
            }
        }
    }
}

int main()
{
    in >> n >> S;
    for (int i=0; i<n; ++i)
        {
            in >> x[i].val;
        }
    qsort(x, n, sizeof(nr), cmp);
    if (6*x[0].val>S || 6*x[n-1].val<S)
    {
        out << -1;
        return 0;
    }
    Back(1);

    return 0;
}