Cod sursa(job #1708732)

Utilizator marioviperconstantin mario marioviper Data 27 mai 2016 21:00:16
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.55 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("loto.in");
ofstream out("loto.out");
typedef struct tip
{
    unsigned long i,j,k,val;
} TIP;
int a[101],poz=0;
TIP b[1000010];
int n,s;
int k[7];
bool ret(TIP a,TIP b)
{
    return a.val<b.val;
}
int main()
{
    in>>n>>s;
    for (int i=1; i<=n; i++)
        in>>a[i];
    for (int i=1; i<=n; i++)
        for (int j=i; j<=n; j++)
            for (int k=j; k<=n; k++)
            {
                poz++;
                b[poz].val=a[i]+a[j]+a[k];
                b[poz].i=i;
                b[poz].j=j;
                b[poz].k=k;
            }
    sort(b+1,b+poz+1,ret);
    bool ok=1;
    for (int i=1; i<=poz && b[i].val<=s; i++)
    {
        int st=0;
        int dr=poz;
        int mij;
while (st<=dr)
        {
            mij=(st+dr)/2;
            if (b[mij].val==s-b[i].val)
            {
                k[1]=a[b[i].i];
                k[2]=a[b[i].j];
                k[3]=a[b[i].k];
                k[4]=a[b[mij].i];
                k[5]=a[b[mij].j];
                k[6]=a[b[mij].k];
                ok=0;
                break;
            }
            else
            {
                if (b[mij].val>s-b[i].val)
                    dr=mij-1;
                else
                    st=mij+1;
            }
        }
        if (ok==0)
            break;
    }
    if (ok==1)
        out<<-1;
    else
    {
        sort(k+1,k+7);
        for (int i=1; i<=6; i++)
            out<<k[i]<<' ';
    }
    return 0;
}