Cod sursa(job #1560345)

Utilizator karlaKarla Maria karla Data 2 ianuarie 2016 16:47:49
Problema Loto Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <bits/stdc++.h>

using namespace std;

FILE*f=fopen("loto.in","r"),*g=fopen("loto.out","w");

int n, s;
int V[105], ST[10];


void afisare()
{
    for(int i = 6; i >= 1; i--)
    {
        fprintf(g,"%d ",ST[i]);
    }
}

int generare(int nr, int sum)
{
    if(nr == 6)
    {
        if(sum == 0)
        {
            afisare();
            return -1;
        }
    }
    else
    {
        int u = 1, p = n, mij;
        while(u <= p)
        {
            mij = (u + p)/2;
            if(V[mij] == sum )
                if(nr == 5)
                {
                    nr++;
                    ST[nr] = V[mij];
                    afisare();
                    return -1;
                }
                else
                {
                    p = mij-1;
                    break;
                }
            else if(V[mij] > sum)
            {
                p = mij - 1;
            }
            else if(V[mij] < sum)
            {
                u = mij +1;
            }
        }
        for(int i = p ; i >= 1; i--)
        {
            nr++;
            ST[nr] = V[i];
            if(generare(nr, sum - V[i]) == -1) return -1;
            nr--;
        }
    }
    return 0;
}


int main()
{
    fscanf(f, "%d %d", &n, &s);
    for(int i = 1; i <= n; i++)
    {
        fscanf(f, "%d", &V[i]);
    }
    sort(V+1, V+n+1);
    int nr = 0;
    for(int i = n; i >= 1; i--)
    {
        if(generare(nr, s) == -1)
        {
            return 0;
        }
    }
    fprintf(g,"-1");
    return 0;
}