Cod sursa(job #1369217)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 2 martie 2015 22:41:56
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <fstream>
#include <vector>
#include <set>
#include <algorithm>
#define nmax 105
using namespace std;
ifstream f("loto.in");
ofstream g("loto.out");
int n,m,s,s1,l[nmax*nmax*nmax];
int a[nmax],pmax=1;


int bs(int x)
{
    int q=0,p=pmax;
    for (p=pmax;p>=1;p=p>>1)
        if (p+q<=m&&l[q+p]<=x)
                q+=p;
    if (x==l[q])
        return q;
    return -1;
}
int main()
{
    int i,j,k,i1,j1,k1,t;
    f>>n>>s;
    for (i=1;i<=n;i++)
        f>>a[i];
    for (i=1;i<=n;i++)
        for (j=i;j<=n;j++)
            for (k=j;k<=n;k++)
                   l[++m]=a[i]+a[j]+a[k];
    sort(l+1,l+m+1);
    while ((pmax<<1)<=m)
        pmax=pmax<<1;

    for (i=1;i<=n;i++)
        for (j=i;j<=n;j++)
            for (k=j;k<=n;k++)
                if (s>=a[i]+a[j]+a[k]) {

                    s1=s-a[i]-a[j]-a[k];
                    t=bs(s1);

                    if (t!=-1) {
                        for (i1=1;i1<=n;i1++)
                            for (j1=i1;j1<=n;j1++)
                                for (k1=j1;k1<=n;k1++)
                                    if (a[i1]+a[j1]+a[k1]==s1) {
                                        g<<a[i]<<' '<<a[j]<<' '<<a[k]<<' '<<a[i1]<<' '<<a[j1]<<' '<<a[k1]<<'\n';
                                        return 0;
                                    }
                    }
            }

    g<<-1<<'\n';
    return 0;
}