Cod sursa(job #1069127)

Utilizator andrei_diaconuAndrei Diaconu andrei_diaconu Data 29 decembrie 2013 14:33:24
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 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[10];

int main()
{
    f>>n>>s;
    for (i=1; i<=n; i++)
        f>>nr[i];
    for (i=1; i<=n; i++)
        for (j=i; j<=n; j++)
            for (k=j; 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;
        for (i=1; i<=6; i++)
            g<<v[i]<<' ';
    }
    else
    {
        g<<-1;
    }
    return 0;
}