Cod sursa(job #213594)

Utilizator madmanjonesJones the one madmanjones Data 10 octombrie 2008 16:07:09
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
using namespace std;

#include <cstdio>
#include <algorithm>
#include <map>

#define IN "loto.in"
#define OUT "loto.out"
#define FOR(i,a,b) for(int i=a;i<=b;++i) 
#define N_MAX 1<<7 


int N,S;
int v[N_MAX];
struct patru{int s,i1,i2,i3;};
patru V[N_MAX*3];

inline int find(int val)  
{  
    int p=1,q=V[0].s,m;  
    while(p<q)  
    {  
        m=(p+q)>>1;  
        if(val<=V[m].s)  
            q=m;  
		else  
			p=m+1;  
    }  
    if(V[p].s==val)  
        return p;  
    return 0;  
}  

void scan()
{
	freopen(IN, "r",stdin);
	freopen(OUT, "w",stdout);
	scanf("%d%d\n", &N,&S);
	FOR(i,1,N)
		scanf("%d", &v[i]);
}

inline bool comp(const patru &x,const patru &y)
{
	return x.s < y.s;
}	

void solve()
{
	FOR(i,1,N)
	FOR(j,i,N)
	FOR(k,j,N)
	{
		V[ ++V[0].s ].s = v[i] + v[j] + v[k];
		V[ V[0].s ].i1 = i;
		V[ V[0].s ].i2 = j;
		V[ V[0].s ].i3 = k;
	}	
	sort(V+1, V+V[0].s ,comp);
	
	FOR(i,1,V[0].s)
	{
		int ok = find(S-V[i].s);
		if(ok)
		{
			printf("%d %d %d %d %d %d\n",v[V[i].i1],v[V[i].i2],v[V[i].i3],v[V[ok].i1],v[V[ok].i2],v[V[ok].i3]);
			return;
		}
	}	
	printf("-1\n");
}

int main()
{
	scan();
	solve();
	return 0;
}