Cod sursa(job #348035)

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

#include <iostream>
#include <fstream>

#include <vector>
#include <algorithm>

#define PRIM 666203

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; ++i)
		for (int j=1; j<=nr_v; ++j)
			for (int k=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; ++i)
		for (int j=1; j<=nr_v; ++j)
			for (int k=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].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();
}

int main()
{
	solve();
	return 0;
}