Cod sursa(job #1088019)

Utilizator Dddarius95Darius-Florentin Neatu Dddarius95 Data 20 ianuarie 2014 04:45:22
Problema Loto Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("loto.in");
ofstream g("loto.out");

int N,S,v[110],nr;
struct point{int val,i,j,k;}w[1000099];

bool cmp(const point &A,const point &B)
{
    return A.val<B.val;
}

int CB(int val)
{
    int i, step;
    for (step = 1; step <= nr; step <<= 1);
    for (i = 0; step; step >>= 1)
        if (i + step <= nr && w[i + step].val <= val)
           i += step;
    if(w[i].val==val)return i;
    else return 0;
}
int main()
{
    f>>N>>S;
    for(int i=1;i<=N;++i)f>>v[i];
    sort(v+1,v+1+N);
    for(int i=1;i<=N;++i)
        for(int j=1;j<=N;++j)
            for(int k=1;k<=N;++k)
            {
                w[++nr].val=v[i]+v[j]+v[k];
                w[nr].i=i,w[nr].j=j,w[nr].k=k;
            }
    sort(w+1,w+1+nr,cmp);
    for(int i=1;i<=N;++i)
        for(int j=1;j<=N;++j)
            for(int k=1;k<=N;++k)
            {
                int poz=CB(S-v[i]-v[j]-v[k]);
                if(poz && poz<=nr)
                {
                    g<<v[i]<<" "<<v[j]<<" "<<v[k]<<" "<<v[w[poz].i]<<" "<<v[w[poz].j]<<" "<<v[w[poz].k]<<'\n';
                    return 0;
                }
            }
    g<<-1<<'\n';
    return 0;
}