Cod sursa(job #1069053)

Utilizator andrei_diaconuAndrei Diaconu andrei_diaconu Data 29 decembrie 2013 12:41:39
Problema Loto Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("loto.in");
ofstream g("loto.out");

struct secv
{
    int sum;
    int e1;
    int e2;
    int e3;
}secvente[1000001];

bool compara(const secv &s1, const secv & s2)
{
    return s1.sum > s2. sum;
}

int n, s, nr[101], i, j, k, l, m, p, st, dr, sc, mij, ok, c1, c2, c3, v[15], v2[15];

int main()
{
    f>>n>>s;
    for (i=1; i<=n; i++)
        f>>nr[i];
    sort(nr + 1, nr + n + 1);
    for (i=1; i<=n; i++)
        for (j=1; j<=n; j++)
            for (k=1; k<=n; k++)
            {
                secvente[++l].sum=nr[i]+nr[j]+nr[k];
                secvente[l].e1=nr[i];
                secvente[l].e2=nr[j];
                secvente[l].e3=nr[k];
            }
    sort(secvente + 1, secvente + l, compara);
    for (i=1; i<=l && ok==0; i++)
    {
        dr=l;
        st=1;
        sc=s-secvente[i].sum;
        while(st<=dr && ok==0)
        {
            mij = (st+dr)/2;
            if (secvente[mij].sum == sc)
                ok=1;
            else if (secvente[mij].sum < sc)
                st = mij + 1;
            else
                dr = mij - 1;
        }
    }
    i--;
    if (ok==1)
    {
        v[1]=secvente[i].e1;
        v[2]=secvente[i].e2;
        v[3]=secvente[i].e3;
        v[4]=secvente[mij].e1;
        v[5]=secvente[mij].e2;
        v[6]=secvente[mij].e3;
        sort(v + 1, v + 7);
        for (i=1; i<=6; i++)
            g<<v[i]<<' ';
    }
    else
    {
        g<<-1;
    }
    return 0;
}