Cod sursa(job #654319)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 30 decembrie 2011 10:59:38
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<fstream>
#include<vector>
#define NMAX 101
#define MOD 666013

using namespace std;

ifstream f("loto.in");
ofstream g("loto.out");

int a[NMAX], n, m, S, SOL[7];
struct st
{
	int s;
	short a, b, c;
} x[1000001];
vector<int> h[MOD];

void Citeste()
{
	int i;
	f>>n>>S;
	for (i=1; i<=n; ++i) f>>a[i];
}

void Formeaza_sume()
{
	int i, j, k;
	for (i=1; i<=n; ++i)
		for (j=1; j<=n; ++j)
			for (k=1; k<=n; ++k)
			{
				x[++m].s=a[i]+a[j]+a[k];
				x[m].a=i; x[m].b=j; x[m].c=k;
				h[x[m].s%MOD].push_back(m);
			}
}

void Rezolva()
{
	int i, s, ok=0, y;
	vector<int>:: iterator it;
	for (i=1; i<=m; ++i)
	{
		s=S-x[i].s;
		y=s%MOD; 
		for (it=h[y].begin(); it!=h[y].end(); ++it)
			if (x[*it].s==s) 
			{
				ok=(*it);
				break;
			}
		if (ok) 
		{
			g<<x[i].a<<" "<<x[i].b<<" "<<x[i].c<<" "<<x[ok].a<<" "<<x[ok].b<<" "<<x[ok].c<<"\n"; 
			break;
		}
	}
	if (!ok) g<<"-1\n";
}

int main()
{
	Citeste();
	Formeaza_sume();
	Rezolva();
	f.close();
	g.close();
	return 0;
}