Cod sursa(job #1997486)

Utilizator PopeangaMihneaPopeanga Mihnea- Stefan PopeangaMihnea Data 4 iulie 2017 14:45:17
Problema Loto Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

ifstream fin("loto.in");
ofstream fout("loto.out");

struct suma
{
    int s, a, b, c;
};

suma sum[1000001];
int x[101], sol[7];
int i, j, k, sx, n, aux, st, dr, m, nr;

bool cmp(suma x, suma y)
{
    return x.s<y.s;
}

int main()
{
    fin>>n>>sx;
    for(i=1; i<=n; ++i) fin>>x[i];
    for(i=1; i<=n; ++i)
    {
        for(j=1; j<=n; ++j)
        {
            for(k=1; k<=n; ++k)
            {
                sum[++nr].s=x[i]+x[j]+x[k];
                sum[nr].a=x[i];
                sum[nr].b=x[j];
                sum[nr].c=x[k];
            }
        }
    }
    sort(sum+1, sum+nr+1, cmp);
    for(i=1; i<=n; ++i)
    {
        for(j=1; j<=n; ++j)
        {
            for(k=1;k<=n; ++k)
            {
                st=1; dr=nr;
                aux=sx-x[i]-x[j]-x[k];
                while(st<=dr)
                {
                    m=(st+dr)/2;
                    if(sum[m].s<aux) st=m+1;
                    else if(sum[m].s>aux) dr=m-1;
                    else
                    {
                        sol[1]=sum[m].a;
                        sol[2]=sum[m].b;
                        sol[3]=sum[m].c;
                        sol[4]=x[i];
                        sol[5]=x[j];
                        sol[6]=x[k];
                        for(i=1; i<=6; ++i) fout<<sol[i]<<" ";
                        return 0;
                    }
                }
            }
        }
    }
    fout<<"-1"<<"\n";
    return 0;
}