Cod sursa(job #490496)

Utilizator paul_gabryelPaul Buda paul_gabryel Data 6 octombrie 2010 18:26:07
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb

#include<stdio.h>
#include<fstream>
#include<algorithm>

using namespace std;

#define m 101

struct loto{
	int s, s1,s2,s3;
	};
	
	int v[m];
	int n,s,ii;
	loto a[m*m*m];
	
			bool inline compara (loto b1,loto b2){
				
				return b1.s<b2.s;
				
				}
	
	int main (){
		
		freopen ("loto.in","w",stdin);
		scanf("%d%d",&n,&s);
		for(int i=1;i<=n;++i)
		scanf("%d",&v[i]);
		
		freopen ("loto.out","w",stdout);
		
		for(int i=1;i<=n;++i)
			for(int j=i;j<=n;++j)
			for(int k=j;k<=n;++k){
				a[++ii].s=v[i]+v[j]+v[k];
				a[ii].s1=v[i];
				a[ii].s2=v[j];
				a[ii].s3=v[k];
				}
			
		sort (a+1,a+ii+1,compara);
		
		int st=1,dr=ii,ss;
		for(int i=1;i<=ii;++i){
			dr=ii+1;
			st=1;
			ss=s-a[i].s;
			while(st<=dr){
				if(ss==a[(st+dr)/2].s){
					printf("%d %d %d %d %d %d\n",a[i].s1,a[i].s2,a[i].s3,a[(st+dr)/2].s1,a[(st+dr)/2].s2,a[(st+dr)/2].s3);
					return 0;
					}
					else
					if(ss>a[(st+dr)/2].s)
					dr=(st+dr)/2-1;
					else
					st=(st+dr)/2+1;
					
				}
			}
			
		printf("-1\n");
		
		return 0;}