Cod sursa(job #179839)

Utilizator AlxCojocaru Alexandru Alx Data 16 aprilie 2008 13:25:06
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<stdio.h>
#include<algorithm>
using namespace std;
int val[1001000];
int nr[110],x,sum,n;
void solve(int s){
	int i,j,k;
	for(i=0;i<n;++i){
		for(j=i;j<n;++j){
			for(k=j;k<n;++k){
				if(nr[i]+nr[j]+nr[k]==s){
					printf("%d %d %d",nr[i],nr[j],nr[k]);
					return;
				}
			}
		}
	}
}
int caut(int i,int u){
	int p,mij;
	p=0;
	while(p!=u){
		mij=(p+u)/2;
		if(sum<=val[i]+val[mij])
			u=mij;
		else
			p=mij+1;
	}
	return p;
}
int main(){
	freopen("loto.in","r",stdin);
	freopen("loto.out","w",stdout);
	int i,j,k,ok=1;
	scanf("%d%d",&n,&sum);
	for(i=0;i<n;++i)
		scanf("%d",&nr[i]);
	x=0;
	for(i=0;i<n;++i){
		for(j=i;j<n;++j){
			for(k=j;k<n;++k){
				val[x]=nr[i]+nr[j]+nr[k];
				++x;
			}
		}
	}
	sort(val,val+x);
	for(i=0;i<x && ok;++i){
		k=caut(i,x-1);
		if(val[i]+val[k]==sum){
			solve(val[i]);
			printf(" ");
			solve(val[k]);
			printf("\n");
			ok=0;
		}
	}

	if(ok)
		printf("-1\n");

	fclose(stdin);
	fclose(stdout);
	return 0;
}