Cod sursa(job #808778)

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

int *v = new int[100], *u = new int[100], *w = new int[100];
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] = v[i];
		w[i] = v[i];
	}
	
	i = 0; k = 0; p = 0; j = n-1; l = n-1; 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 (sum < s)
		{
			if (i <= j)
			{
				sum -= v[i];
				i++;
				sum += v[i];
			}
			else if (k <= l)
			{
				sum -= u[k];
				k++;
				sum += u[k];
			}
			else if (p <= q)
			{
				sum -= w[p];
				p++;
				sum += w[p];
			}
			else smen = true;
		}
		else if (sum > s)
		{
			if (i <= j)
			{
				sum -= v[j];
				j--;
				sum += v[j];
			}
			else if (k <= l)
			{
				sum -= u[l];
				l--;
				sum += u[l];
			}
			else if (p <= q)
			{
				sum -= w[q];
				q--;
				sum += w[q];
			}
			else smen = true;
		}
		else (smen = true);
	*/
	if (/*sum == s*/ smen) out<<v[i]<<" "<<u[k]<<" "<<w[p]<<" "<<v[j]<<" "<<u[l]<<" "<<w[q];
	else out<<-1;
}