Cod sursa(job #4979)

Utilizator dzsDonca Zsolt dzs Data 9 ianuarie 2007 00:33:10
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
// Loto.cpp : Defines the entry point for the console application.
//

#include <stdio.h>
//#include <conio.h>

#pragma warning(disable : 4996)

long n, s;
long v[100];
long sz[6] = {0};

int sort()
{
	for(int i=0;i<n;i++)
	{
		int min = i;
		for(int j=i+1;j<n;j++)
			if (v[min] > v[j]) min = j;
		if (min != i)
		{
			long cs = v[i];
			v[i] = v[min];
			v[min] = cs;
		};
	};
	return 0;
};

int backn0(int p)
{
	int retv = 0;
	if (p >= 6)
	{
		long sum = 0;
		for(int i=0;i<6;i++) sum += v[sz[i]];
		if (sum == s) retv = 1;
	} else {
//		sz[p] = sz[p-1];
		sz[p] = 0;
		while (sz[p] < n && retv == 0)
		{
			retv = backn0(p+1);
			sz[p]++;
		}
		sz[p]--;
	}
	return retv;
}

int back0()
{
	int retv = 0;
	while (sz[0] < n && retv == 0)
	{
		retv = backn0(1);
		sz[0]++;
	}
	return retv;
}

int main(int argc, char* argv[])
{
	long i;
	FILE *f = fopen("loto.in","r");
	fscanf(f, "%ld %ld", &n, &s);
	for(i=0;i<n;i++) fscanf(f, "%ld", &v[i]);
	fclose(f);

//	sort();

	f = fopen("loto.out","w");

/*	if (s < v[0]*6 || s > v[n-1]*6)
	{
		fprintf(f, "-1");
	} else */{
		/*if (s == v[n-1]*6)
		{
			for(i=0;i<6;i++) fprintf(f, "%ld ", v[n-1]);
		} else */{
			if (back0() != 0)
			{
				for(i=0;i<6;i++) fprintf(f, "%ld ", v[sz[i]]);
			} else {
				fprintf(f,"-1");
			}
		}
	}

	fclose(f);
	return 0;
}