Cod sursa(job #487610)

Utilizator Balmus_MaximBalmus Maximilian Balmus_Maxim Data 25 septembrie 2010 19:31:29
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <stdio.h>
#include <algorithm>
using namespace std;

struct jumatate{
	long a; long b;long c;
	long s;
};

int msp(jumatate a, jumatate b){
	return a.s < b.s;
};

long n,v[101],s,i,j,k,p=1;

jumatate ju[1000000];

int main()
{
	freopen("loto.in","r",stdin);
	freopen("loto.out","w",stdout);
	
	scanf("%ld",&n);
	scanf("%ld",&s);
	for(i=1;i<=n;i++){
		scanf("%d",&v[i]);
	}
	for(i=1;i<=n;i++){
		for(j=i;j<=n;j++){
			for(k=j;k<=n;k++){
				ju[p].s=v[i]+v[j]+v[k];
				ju[p].a=v[i];
				ju[p].b=v[j];
				ju[p].c=v[k];
				p++;
			}
		}
	}
	sort(ju+1,ju+p,msp);
	int min=1,max=p,m;
	long long x; 
	for(i=1;i<=p-1;i++){
		min=1;
		max=p;
		x=s-ju[i].s;
		while(min<=max){        
			if(x==ju[(min+max)/2].s){
				 printf("%ld %ld %ld %ld %ld %ld",ju[i].a,ju[i].b,ju[i].c,ju[(min+max)/2].a,ju[(min+max)/2].b,ju[(min+max)/2].c);
				 return 0;         
			}else{           
				if (x<ju[(min+max)/2].s){               
					max=(min+max)/2-1;            
				}else{                
					min=( min+max)/2+1;
				}
			}
		}		
	}
	printf("-1");
	return 0;
}