Cod sursa(job #775717)

Utilizator okros_alexandruOkros Alexandru okros_alexandru Data 8 august 2012 18:56:22
Problema Loto Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <fstream>
#include <algorithm>
#define NMAx 110
#define MMAx 1000100
using namespace std;

int N,S,Nr,A[NMAx],B[MMAx],V[MMAx],Used[3][MMAx];

bool cmp(int X,int Y) {

	return B[V[X]]<B[V[Y]];
	
}
void Afis(int i,int j) {
	
	ofstream out("loto.out");
	
	if(i==-1)
		out<<"-1\n";
	else {
		for(int k=0;k<=2;out<<Used[k++][i]<<' ');
		for(int k=0;k<=2;out<<Used[k++][j]<<' ');
		out<<'\n';
		}
	
	out.close();
	
}
void Solve() {
	
	int i,j,k;
	
	for(i=1;i<=N;i++)
		for(j=i;j<=N;j++)
			for(k=j;k<=N;k++) {
				B[++Nr]=A[i]+A[j]+A[k];
				Used[0][Nr]=A[i];
				Used[1][Nr]=A[j];
				Used[2][Nr]=A[k];
				}
	
	for(i=1;i<=Nr;V[i]=i++);
	sort(V+1,V+Nr+1,cmp);
	
	for(i=1,j=Nr;i<=j;) {
		
		while(B[V[i]]+B[V[j]]>S&&i<=j) j--;
		while(B[V[i]]+B[V[j]]<S&&i<=j) i++;
		
		if(B[V[i]]+B[V[j]]==S) {
			Afis(V[i],V[j]);
			return;
			}
		
		}
	
	Afis(-1,-1);
	
}
void Citire() {
	
	ifstream in("loto.in");
	in>>N>>S;
	for(int i=1;i<=N;in>>A[i++]);
	in.close();
	
}
int main() {
	
	Citire();
	Solve();
	
	return 0;
	
}