Cod sursa(job #348041)

Utilizator serbanlupulupulescu serban serbanlupu Data 13 septembrie 2009 20:54:19
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.62 kb
//infoarena
//pb:	Loto

#include <iostream>
#include <fstream>

#include <vector>
#include <algorithm>

#include <ctime>		//void generator;	&&		//int main();

#define PRIM 100001

using namespace std;

int v[101];
int nr_v;
int sum;

struct node
{
	int i,j,k;
	int sum;
	node(int i, int j, int k, int sum)
	{
		this->i=i;
		this->j=j;
		this->k=k;
		this->sum=sum;
	}
};

vector< vector<node > > H;

void solve()
{
	fstream f("loto.in", ios::in);
	fstream g("loto.out", ios::out);

	f>>nr_v;
	f>>sum;
	H.resize(666203);

	for (int i=1; i<=nr_v; ++i)
		f>>v[i];

	for (int i=1; i<=nr_v-2; ++i)
		for (int j=i+1; j<=nr_v-1; ++j)
			for (int k=j+1; k<=nr_v; ++k)
			{
				node nou(i, j, k, v[i]+v[j]+v[k]);
				H[(v[i]+v[j]+v[k])%PRIM].push_back(nou);
			}
	int sol[7];
	for (int i=1; i<=nr_v-2; ++i)
		for (int j=i+1; j<=nr_v-1; ++j)
			for (int k=j+1; k<=nr_v; ++k)
			{
				vector<node>::iterator it;
				int poz=sum-v[i]-v[j]-v[k];
				for (it=H[poz].begin(); it<H[poz%PRIM].end(); it++)
					if (it->sum==poz)
					{
						sol[1]=v[it->i];
						sol[2]=v[it->j];
						sol[3]=v[it->k];
						sol[4]=v[i];
						sol[5]=v[j];
						sol[6]=v[k];
						goto GOOD;
					}
			}
	g<<"-1";
	goto END;
GOOD:
	sort(sol+1, sol+7);
	for (int i=1; i<=6; ++i)
		g<<sol[i]<<" ";
END:
	f.close();
	g.close();
}
/*
void generator()
{
	fstream f("test.in", ios::out);
	f<<"100 542332\n";
	for (int i=1; i<=100; ++i)
		f<<rand()%101<<" ";
	f.close();
}
*/
int main()
{
	//generator();
	//double s=clock();
	solve();
	//cout<<(clock()-s)/(double)CLOCKS_PER_SEC;
	return 0;
}