Cod sursa(job #1315483)

Utilizator radudorosRadu Doros radudoros Data 12 ianuarie 2015 20:52:23
Problema Loto Scor 0
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I Marime 1.25 kb
#include<fstream>
#include< unordered_set>
using namespace std;

ifstream fin("loto.in");
ofstream fout("loto.out");
unordered_set<int>h;
int v[101];

int main()
{
	int n;
	fin >> n;
	int s;
	fin >> s;
	for (int i = 1; i <= n; i++)
		fin >> v[i];
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= n; j++)
		{
			for (int k = 1; k <= n; k++)
			{
				if (h.find(v[i] + v[j]+v[k])==h.end())
				{
					h.insert(v[i] + v[j] + v[k]);
				}
			}
		}
	}
	bool g = 0;
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= n; j++)
		{
			for (int k = 1; k <= n; k++)
			{
				if (h.find(s - (v[i] + v[j] + v[k]))!=h.end())
				{
					fout << v[i] <<' '<< v[j] <<' '<< v[k]<<' ';
					s -= v[i] + v[j] + v[k];
					g = 1;
					break;
				}
				
			}
			if (g == 1)
				break;
		}
		if (g == 1)
			break;
	}

	if (g == 0)
		fout << -1;
	else
	{
		g = 0;
		for (int i = 1; i <= n; i++)
		{
			for (int j = 1; j <= n; j++)
			{
				for (int k = 1; k <= n; k++)
				{
					if (v[i] + v[j] + v[k]==s)
					{
						fout << v[i] << ' ' << v[j] << ' ' << v[k] << ' ';
						s -= v[i] + v[j] + v[k];
						g = 1;
						break;
					}

				}
				if (g == 1)
					break;
			}
			if (g == 1)
				break;
		}
	}
}