Cod sursa(job #497059)

Utilizator KoniacDocea Andrei Koniac Data 1 noiembrie 2010 16:01:32
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<stdio.h>
#include<algorithm>
using namespace std;

FILE*f=fopen("loto.in","r");
FILE*g=fopen("loto.out","w");

int N,S,i,j,k,poz,pozz,p,u,nr,a[101];

struct suma{
	int poz1;
	int poz2;
	int poz3;
	int sum;
} v[1000100];

int cmp(suma a,suma b){
	return a.sum < b.sum;
}

int main () {
	
	fscanf(f,"%d %d",&N,&S);
	
	for ( i = 1 ; i <= N ; ++i ){
		fscanf(f,"%d",&a[i]);
	}
	
	for ( i = 1 ; i <= N ; ++i ){
		for ( j = i ; j <= N; ++j ){
			for ( k = j ; k <= N ; ++k ){
				++nr;
				v[nr].poz1 = i;
				v[nr].poz2 = j;
				v[nr].poz3 = k;
				v[nr].sum = a[i] + a[j] + a[k];
			}
		}
	}
	
	sort(v+1,v+nr+1,cmp);
	
	p = 1 ; u = nr;
	while ( p <= u ){
		int aux = v[p].sum + v[u].sum;
		
		if ( S == aux ){
			poz = p;
			pozz = u;
			break;
		}
		if ( aux > S ) --u;
		else ++p;
		
	}
	
	if ( pozz == 0 ) fprintf(g,"-1\n");
	else{
		fprintf(g,"%d %d %d ",a[v[poz].poz1],a[v[poz].poz2],a[v[poz].poz3]);
		fprintf(g,"%d %d %d ",a[v[pozz].poz1],a[v[pozz].poz2],a[v[pozz].poz3]);
	}
	
	
	fclose(f);
	fclose(g);
	
	return 0;
}