Cod sursa(job #20034)

Utilizator szakiold name szaki Data 20 februarie 2007 16:54:25
Problema Loto Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <fstream.h>

int n, i, k, p[7];
long s, a[102], max = 0, o, t;
int van0 = 0, vans = 0, s6 = 0;

int as,ev;

int main()
{
	ifstream be("loto.in");
	ofstream ki("loto.out");
	be >> n >> s;
	if (s % 6 == 0) s6 = 1;

	for (i = 0; i<n; i++)
	{
		be >> a[k];
		if (a[k] <= s)
		{
			if (a[k] == 0) van0 = 1;
			else if (a[k] == s) vans = 1;
			if (van0 & vans) break;

			if (s6) if (a[k] * 6 == s) {max = a[k]; break;}
			if (a[k] > max) max = a[i];
			k++;
		}
	}
	n = k;
	if (van0 & vans) ki << s << " 0 0 0 0 0";
	else
		if (max * 6 < s) ki << -1;
		else if (max * 6 == s) ki << max << max << max << max << max << max;
		else
		{
			if (n == 1) ki << -1;
			else
			{
				p[5] = 0;
				o = 6 * a[0];
				while (p[0] != n - 1)
				{
					o -= a[p[5]];
					p[5]++;
					for (i = 4; p[i + 1] == n && i >= 0; i--)
					{ o -= a[p[i]]; p[i]++;	}
					if (i < 4)
					{
						t = p[i+1]; o += a[p[i + 1]];
						for (i+=2; i < 6; i++)
						{ p[i] = t; o += a[p[i]];}

					}
					else
						o += a[p[5]];

					if (o == s) break;
				}
				if (o != s) ki << -1;
				else
  					{for (i = 0; i < 5; i++) ki << a[p[i]] << ' '; ki << a[p[5]];}
			}
		}

	be.close();
	ki.close();
	return 0;
}