Cod sursa(job #348077)

Utilizator serbanlupulupulescu serban serbanlupu Data 13 septembrie 2009 22:17:04
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

#define PRIM 100001

vector<int > H[PRIM];

int v[101];
int  nr_v;
int sum;
int stop=0;

bool check(int sum)
{
	vector<int >::iterator it;

	for (it=H[sum%PRIM].begin(); it<H[sum%PRIM].end(); it++)
		if (*it==sum)
			return 1;
	return 0;
}

void afisare(int sum,int q, int w, int e)
{
	for (int i=1; i<=nr_v; ++i)
		for (int j=i; j<=nr_v; ++j)
			for (int k=j; j<=nr_v; ++k)
				if ( (v[i]+v[j]+v[k])==sum )
				{
					fstream g("loto.out", ios::out);
					g<<v[q]<<" "<<v[w]<<" "<<v[e]<<" "<<v[i]<<" "<<v[j]<<" "<<v[k]<<"\n";
					g.close();
					stop=1;
				}
}

void solve()
{
	fstream f("loto.in", ios::in);
	f>>nr_v;
	f>>sum;
	for (short i=1; i<=nr_v; ++i)
		f>>v[i];

	for (short i=1; i<=nr_v; ++i)
		for (short j=i; j<=nr_v; ++j)
			for (short k=j; k<=nr_v; ++k)
			{
				int suma=v[i]+v[j]+v[k];
				if ( check(suma)==0 )
					H[suma%PRIM].push_back(suma);
			}

	for (short i=1; i<=nr_v; ++i)
		for (short j=i; j<=nr_v; ++j)
			for (short k=j; k<=nr_v; ++k)
			{
				int suma_aux=sum-v[i]-v[j]-v[k];
				if (suma_aux>=0)
					if (check(suma_aux))
						afisare(suma_aux, i, j, k);
			}
	if (stop==0)
	{
		fstream g("loto.out", ios::out);
		g<<"-1";
		g.close();
	}
}

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