Cod sursa(job #821885)

Utilizator razvan9310FMI - Razvan Damachi razvan9310 Data 22 noiembrie 2012 19:21:56
Problema Loto Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <fstream>
using namespace std;

#define mod 3222223

struct nod
{
	int inf1, inf2, inf3;
	nod *adr;
}*l[mod];

void add(int a, int b, int c)
{
	const int s = a+b+c, m = s%mod;
	if (!l[m])
	{
		l[m] = new nod;
		l[m]->inf1 = a;
		l[m]->inf2 = b;
		l[m]->inf3 = c;
		l[m]->adr = NULL;
		return;
	}
	nod *p = l[m];
	while (p->adr && (p->inf1 + p->inf2 + p->inf3 != s)) p = p->adr;
	if (p->adr) return;
	p->adr = new nod;
	p->adr->inf1 = a; p->adr->inf2 = b; p->adr->inf3 = c;
	p->adr->adr = NULL;
}

int main()
{
	ifstream in("loto.in"); ofstream out("loto.out");
	int n, s, i, j, k, *v;
	in>>n>>s;
	v = new int[n];
	for (i=0;i<n;i++) in>>v[i];
	
	for (i=0;i<n;i++)
		for (j=0;j<n;j++)
			for (k=0;k<n;k++)
				add(v[i], v[j], v[k]);
	
	for (i=0;i<mod;i++)
	{
		nod *p = l[i];
		while (p)
		{
			int sum1 = p->inf1 + p->inf2 + p->inf3;
			nod *q = l[(s-sum1)%mod];
			while (q)
			{
				int sum2 = q->inf1 + q->inf2 + q->inf3;
				if (sum1 + sum2 == s)
				{
					out<<p->inf1<<" "<<p->inf2<<" "<<p->inf3<<" "<<q->inf1<<" "<<q->inf2<<" "<<q->inf3;
					return 0;
				}
				q = q->adr;
			}
			p = p->adr;
		}
	}
		
	out<<-1;
	return 0;
}