Cod sursa(job #483642)

Utilizator dcm9000Dinu Cristian Mircea - UPB dcm9000 Data 9 septembrie 2010 15:50:05
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <iostream>
#include <algorithm>
#include <fstream>
#include <string>

using namespace std;

#define FILE_IN "loto.in"
#define FILE_OUT "loto.out"

int N, S;
int NR[100];
int NR_SUME;
long long SUME[1000000];

int main()
{
	ifstream fisIn(FILE_IN);
	fisIn >> N >> S;
	for (int i=0; i<N; i++) fisIn >> NR[i];

	long long* ptr = SUME;
	for (int i=0; i<N; i++)
	{
		long long nrI = NR[i];
		for (int j=0; j<N; j++)
		{
			long long suma = nrI+NR[j];
			for (int k=0; k<N; k++)
				*ptr++ = (suma+NR[k])*1000000LL+i*10000+j*100+k;
		}
	}
	sort(SUME, ptr);
	NR_SUME = ptr-SUME;

	ofstream fisOut(FILE_OUT);

	for (int i=0; i<NR_SUME; i++)
	{
		int suma = SUME[i]/1000000;
		
		if (suma>(S >> 1)) break;

		ptr = lower_bound(SUME, SUME+NR_SUME, (S-suma)*1000000LL);
		if ((ptr != SUME+NR_SUME) && ((S-suma) == *ptr/1000000LL))
		{
			fisOut
				<< (NR[(SUME[i]/10000)%100]) << " "
				<< (NR[(SUME[i]/100)%100]) << " "
				<< (NR[SUME[i]%100]) << " "
				<< (NR[(*ptr/10000)%100]) << " "
				<< (NR[(*ptr/100)%100]) << " "
				<< (NR[*ptr%100]);
			
			return 0;
		}
	}

	fisOut << -1;
}