Cod sursa(job #808756)

Utilizator razvan9310FMI - Razvan Damachi razvan9310 Data 7 noiembrie 2012 11:12:27
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <fstream>
using namespace std;

int *v = (int*)malloc(400), *u = (int*)malloc(400), *w = (int*)malloc(400);
ifstream in("loto.in");
ofstream out("loto.out");

void quickSort(int *v, int stg, int dpt)
{
	int i=stg, j=dpt, aux, m=v[(i+j)/2];
	while (i <= j)
	{
		while (v[i] < m) i++;
		while (v[j] > m) j--;
		if (i <= j)
		{
			aux = v[i];
			v[i] = v[j];
			v[j] = aux;
			i++; j--;
		}
	}
	if (i < dpt) quickSort(v, i, dpt);
	if (stg < j) quickSort(v, stg, j);
}

int main()
{
	int n, s, i, sum, j, k, l, p, q;
	in>>n>>s;
	for (i=0;i<n;i++) in>>v[i];
	
	quickSort(v, 0, n-1);
	
	for (i=0;i<n;i++)
		u[i] = w[i] = v[i];
	
	i = k = p = 0; j = l = q = n-1;
	if (6 * v[j] < s)
	{
		out<<-1;
		return 0;
	}
	sum = v[i] + v[j] + u[k] + u[l] + w[p] + w[q];
	bool smen = false;
	
	while (!smen && i<=j && k<=l && p<=q)
	{
		if (sum < s) sum = sum - v[i] + v[++i];
		if (sum < s) sum = sum - u[k] + u[++k];
		if (sum < s) sum = sum - w[p] + w[++p];
		if (sum > s) sum = sum - v[j] + v[--j];
		if (sum > s) sum = sum - u[l] + u[--l];
		if (sum > s) sum = sum - w[q] + w[--q];
		if (sum == s) smen = true;
	}
	
	if (smen) out<<v[i]<<" "<<u[k]<<" "<<w[p]<<" "<<v[j]<<" "<<u[l]<<" "<<w[q];
	else out<<-1;
}