Cod sursa(job #1336888)

Utilizator GrandmasterSoucup Bogdan Grandmaster Data 8 februarie 2015 13:32:17
Problema Loto Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.84 kb
#include <iostream>
#include <fstream>
#include <iomanip>
#include <algorithm>
#include <set>
#include <vector>
#include <map>
#include <queue>
#include <stack>
#include <utility>
#include <string>
#include <cstring>
#include <cctype>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <limits>
#include <sstream>
#include <deque>
#include <bitset>
#include <complex>
#include <functional>
#include <memory>
#include <numeric>
#define x first
#define y second
typedef std::pair<int, int> pii;

using namespace std;
ifstream fin("loto.in");
ofstream fout("loto.out");
int n, s, x[102], y[102], z[102];
unsigned long long sum = 0, goose = 0;
unsigned long long suma = 0;
void back1(int k, int n)
{
	if(k == n)
	{	
		suma = 0;
		for(int i = 0; i < n; i++)
		{
			suma += x[z[i]];
		}
		if(suma == s)
		{
			for(int i = 0; i < n; i++)
			{
				if(x[z[i]] == 0)
				{
					fout << "-1";
					exit(0);
				}
			}
			for(int i = 0; i < n; i++)
			{
				fout << x[z[i]] << " ";
			}
			exit(0);
		}
	}
	else
		for(int i = 0; i < n; i++)
		{
			z[k] = i;
			back1(k + 1, n);
		}
}
void back(int k)
{
	unsigned long long sul = 0;
	if(k == 6)
	{
		for(int i = 0; i < 6; i++)
			sul += x[y[i]];
		if(sul == s)
		{
			for(int i = 0; i < 6; i++)
				if(x[y[i]] == 0)
				{
					fout << "-1";
					exit(0);
				}
			for(int i = 0; i < 6; i++)
				fout << x[y[i]] << " ";
			exit(0);
		}
	}
	else
		for(int i = 0; i < 6; i++)
		{
			y[k] = i;
			back(k + 1);
		}
}
int main () {
	fin >> n >> s;
	for(int i = 0; i < n; i++)
	{
		fin >> x[i];
		sum += x[i];
	}
	sort(x, x + n);
	if(x[n - 1] * 6 < s || x[0] * 6 > s)
	{
		fout << "-1";
		exit(0);
	}
	if(n < 6)
	{
		back(0);
		fout << "-1";
		exit(0);
	}
	else
	{
		back1(0, n);
		cout << "-1";
		exit(0);
	}
	return 0;
}