Cod sursa(job #428503)

Utilizator mihaismolenskiMihai Smolenski mihaismolenski Data 29 martie 2010 12:17:53
Problema Loto Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <stdio.h>
#include <algorithm>
#include <map>
using namespace std;
FILE * fin=fopen ("loto.in", "rt");
FILE * fout=fopen ("loto.out", "wt");

int n, S, s1, s2, v[101], ok1=1, ok2=1;
map <int, int> viz;

void citire ();
void rezolvare ();
void afisare ();
void generare ();

int main ()
{

citire ();
generare ();
rezolvare ();
	
fclose(fout);
fclose(fin);
return 0;
}

void citire ()
	{
	int i;
	fscanf(fin, "%d %d", &n, &S);
	for (i=0; i<n; i++)
		fscanf(fin, "%d", &v[i]);
	}
	
void generare ()
	{
	int i, j, k;
	for (i=0; i<n; i++)
		for (j=0; j<n; j++)
			for (k=0; k<n; k++)
				{
				viz[v[i]+v[j]+v[k]]=1;
				s1=v[i]+v[j]+v[k];
				if (viz[S-s1])
					{s2=S-s1;ok1=0;ok2=0;}
				}
	}

void rezolvare ()
	{
	int i, j, k;
	/*for (i=0; i<n; i++)
		if (viz[i] && viz[S-i])
			{s1=i; s2=S-i;break;}*/
	//determinare
	if (ok1==1 && ok2==1)
		fprintf(fout, "%d\n", -1);
		else
	{
	for (i=0; i<n; i++)
		for (j=0; j<n; j++)
			for (k=0; k<n; k++)
				{
				if (v[i]+v[j]+v[k]==s1 && !ok1)
					{ok1=1;fprintf(fout, "%d %d %d ", v[i], v[j], v[k]);}
				if (v[i]+v[j]+v[k]==s2 && !ok2)
					{ok2=1;fprintf(fout, "%d %d %d ", v[i], v[j], v[k]);}
				}
	fprintf(fout, "\n");
	}	
	}