Cod sursa(job #291217)

Utilizator ssergiussSergiu-Ioan Ungur ssergiuss Data 29 martie 2009 15:56:35
Problema Loto Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include<algorithm>
using namespace std;

#define DIM 101

int n,m,s,v[DIM];

struct trip{
    int x,y,z,sum;};
trip a[DIM*DIM];

/*void sort(){
    int i,j;
    trip aux;

    for(i=1; i<m; ++i)
        for(j=i+1; j<=m; ++j)
            if(a[i].sum>a[j].sum){
            aux=a[i];
            a[i]=a[j];
            a[j]=aux;}}*/

int cmp(trip a,trip b){

    return a.sum<b.sum;}

int cbin(int val){
	int st,dr,mij;

	for(st=1,dr=m; st<=dr; ){
		mij=(st+dr)/2;
		if(a[mij].sum<val)
			st=mij+1;
		else if(a[mij].sum>val)
			dr=mij-1;
		else if(a[mij].sum==val)
			return mij;}
	return 0;}

void gen(){
    int i,j,k;

	for(i=1; i<=n; ++i)
		for(j=i; j<=n; ++j)
			for(k=j; k<=n; ++k){
                a[++m].x=v[i];
                a[m].y=v[j];
                a[m].z=v[k];
                a[m].sum=v[i]+v[j]+v[k];}}

void solve(){
    int i,poz;

    scanf("%d%d",&n,&s);
    for(i=1; i<=n; ++i)
        scanf("%d",&v[i]);
    gen();
    sort(a+1,a+m+1,cmp);
    for(i=1; i<=m; ++i){
        poz=cbin(s-a[i].sum);
        if(poz){
            printf("%d %d %d %d %d %d",a[i].x,a[i].y,a[i].z,a[poz].x,a[poz].y,a[poz].z);
            i=m+1;}}
    if(i==m+1)
        printf("-1");}

int main(){

    freopen("loto.in","r",stdin);
    freopen("loto.out","w",stdout);
    solve();
    return 0;}