Cod sursa(job #428525)

Utilizator alexandruciteaCitea Alexandru alexandrucitea Data 29 martie 2010 12:27:03
Problema Loto Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <stdio.h>
#include <vector>
#include <map>
#define INFILE "loto.in"
#define OUTFILE "loto.out"
using namespace std;

long int n, s;

vector <int> a;
map <int, int> viz;

void citire ();
void det ();

int main ()
{
	citire ();
	det ();
	return 0;
}

void citire ()
{
	long int x, i;
	FILE * fin=fopen (INFILE, "r");
	fscanf (fin, "%ld%ld", &n, &s);
	for (i=0; i<n; i++)
	{
		fscanf (fin, "%ld", &x);
		a.push_back(x);
	}
	fclose (fin);
}

void det ()
{
	FILE * fout=fopen (OUTFILE, "w");
	long int i, j, k, ok=1, SUMA;
	for (i=0; i<n; i++)
		for (j=0; j<n; j++)
			for (k=0; k<n; k++)
			{
				viz[a[i]+a[j]+a[k]]=1;
			}
	for (i=0; i<n&&ok; i++)
		for (j=0; j<n&&ok; j++)
			for (k=0; k<n; k++)
			{
				if (viz[s-(a[i]+a[j]+a[k])])
				{
					fprintf (fout, "%d %d %d ", a[i], a[j], a[k]);	
					ok=0; 
					SUMA=s-(a[i]+a[j]+a[k]);
					break;
				}
			}
	if (i==n && j==n && k==n)
		fprintf (fout, "%d\n", -1);
	else
	{
	ok=1;
	for (i=0; i<n&&ok; i++)
		for (j=0; j<n&&ok; j++)
			for (k=0; k<n; k++)
			{
				if (a[i]+a[j]+a[k]==SUMA)
				{
					fprintf (fout, "%d %d %d\n", a[i], a[j], a[k]);
					ok=0;
					break;
				}
			}
	}
	fclose (fout);
}