Cod sursa(job #487550)

Utilizator cristian9Cristian Zloteanu cristian9 Data 25 septembrie 2010 15:21:34
Problema Loto Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include<stdio.h>
#include<algorithm>
using namespace std;

struct numar{
	long a, b, c, s;
};
numar sum[1000000];

int cmp (numar x, numar y){
	return x.s < y.s ;
}

int main(){
    freopen ("loto.in", "r", stdin);
    freopen ("loto.out", "w", stdout);

	long n, s, v[101], j, k, i, z=0, a, min, max;

	scanf("%d %d", &n, &s);

	for(i=1; i<=n; i++)
		scanf ("%d ", &v[i]);

	for(i=1; i<=n; i++){
		for(j=1; j<=n; j++){
			for(k=1; k<=n; k++){
				sum[++z].s=v[i]+v[j]+v[k];
				sum[z].a=v[i];
				sum[z].b=v[j];
				sum[z].c=v[k];
			}
		}
	}

	sort(sum+1, sum+z+1, cmp);

	/*for(i=1; i<=z; i++){
		printf("%d %d %d %d\n", sum[i].s, sum[i].a, sum[i].b, sum[i].c);
	}
	return 0;*/
	for(i=1; i<=z; i++){
		//printf("%d ", i);
		a=s-sum[i].s;
		//printf("%d ", a);
		min=1;
		max=z;
		while(min<=max){
			if(a==sum[(min+max)/2].s){
				printf("%d %d %d %d %d %d ", sum[i].a, sum[i].b, sum[i].c, sum[(min+max)/2].a, sum[(min+max)/2].b, sum[(min+max)/2].c);
				return 0;
			}
			else{
				if(a<sum[(min+max)/2].s){
					max=(max+min)/2-1;
				}
				else{
					min=(min+max)/2+1;
				}
			}
		}
	}

	printf("-1");
	return 0;
}