Cod sursa(job #2787529)

Utilizator db_123Balaban David db_123 Data 23 octombrie 2021 17:21:35
Problema Loto Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.57 kb
#include <fstream>
#include <algorithm>


using namespace std;

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

int   n,sum;
int   v[101];
int   frecv[101]={0};
bool  visited[101]={0};
bool  gata = false;

const int   TOTAL = 6;

bool isOK(int i)
{
    int s = 0,count=0;

    /// calculate sum of elements and count them
    for(int i = 0 ; i < n ; i++)
    {
        if(frecv[i]>0)
        {
            s+=v[i]*frecv[i];
            count+=frecv[i];
        }
    }

    if (count < TOTAL && (s + v[i] <= sum))
        return true;
    return false;

}
bool isDone()
{
    /// calculate sum of visited
    int s=0,count=0;
    for(int i = 0 ; i < n ; i++)
    {
        if(frecv[i]>0)
        {
            s+=v[i]*frecv[i];
            count+=frecv[i];
        }

    }
    if(count == TOTAL && s == sum)
        return true;

    return false;
}
void display()
{
    for(int i = 0 ; i < n ; i++)
    {
        while(frecv[i]>0)
        {
            cout << v[i] <<" ";
            frecv[i]--;
        }
    }
}
void back()
{
    /// base condition
    if(isDone() && !gata)
    {
        gata = true;
        display();
        return;
    }


    /// recursive function
    for(int i = 0 ; i < n ; i++)
    {
        if ( isOK(i))
        {
            frecv[i]++;
            back();
            frecv[i]--;
        }
    }
}

int main()
{
    cin>>n>>sum;
    for(int i =0 ; i < n ; i++)
        cin>>v[i];

    sort(v,v+n);

    back();
    if(!gata)
        cout<<"-1";

    return 0;
}