Cod sursa(job #1510123)

Utilizator NicuCJNicu B. NicuCJ Data 24 octombrie 2015 16:29:38
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

struct numere{
    long long x,y,z,s1;
};

numere s[1000003];

bool functie(numere A, numere B)
{
    if(A.s1<B.s1)
        return 1;
    else return 0;
}

int main()
{
    long long n,suma,a[102],p=1,st=1,dr,s2,poz1=0,poz2=0,mijloc,v[7],i,j,z,ok=0;
    ifstream f("loto.in");
    ofstream g("loto.out");
    f>>n>>suma;
    for (i=1;i<=n;i++)
        f>>a[i];
    for (i=1;i<=n;i++)
        for (j=i;j<=n;j++)
            for (z=j;z<=n;z++){
                s[p].x=a[i];
                s[p].y=a[j];
                s[p].z=a[z];
                s[p].s1=a[i]+a[j]+a[z];
                p++;
            }
    sort (s+1,s+p+1,functie);
    p--;
    dr=p;
    while (st<=dr){
        mijloc=(st+dr)/2;
        if (s[mijloc].s1<suma){
            s2=suma-s[mijloc].s1;
            poz1=mijloc;
            for (i=1;i<=p;i++)
                if (s[i].s1==s2){
                    poz2=i;
                    ok=1;
                    break;
                }
            st=mijloc+1;
        }
        if (s[mijloc].s1>suma)
            dr=mijloc-1;
    }
    if (ok==1){
        v[1]=s[poz1].x;
        v[2]=s[poz1].y;
        v[3]=s[poz1].z;
        v[4]=s[poz2].x;
        v[5]=s[poz2].y;
        v[6]=s[poz2].z;
        sort (v+1,v+7+1);
        for (i=1;i<7;i++)
            g<<v[i]<<" ";
    }
    else
        g<<-1;
    return 0;
}