Cod sursa(job #1732294)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 21 iulie 2016 13:26:53
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <cstdio>
#include <algorithm>
#include <vector>
#define MOD 7919
using namespace std;

int N,v[1005],F,Sum,i,j,k;
struct Hash
{
	int x,y,z,S;
}C;
struct OUT
{
	int x,y,z;
	bool b;
}Out,out;
vector <Hash> H[MOD];
int f(int val)
{
	return val%MOD;
}
void Add(int x1,int x2,int x3)
{
	F=f(v[x1]+v[x2]+v[x3]);
	C.x=x1;
	C.y=x2;
	C.z=x3;
	C.S=v[x1]+v[x2]+v[x3];
	H[F].push_back(C);
}
OUT Search(int val)
{
	F=f(val);
	out.b=false;
	for(i=0;i<H[F].size();i++)
		if(H[F][i].S==val)
		{
			out.b=true;
			out.x=H[F][i].x;
			out.y=H[F][i].y;
			out.z=H[F][i].z;
			return out;
		}
	return out;
}
int main()
{
    freopen("loto.in","r",stdin);
    freopen("loto.out","w",stdout);
	scanf("%d%d",&N,&Sum);
	for(int i=1;i<=N;i++)
		scanf("%d",&v[i]);
	for (i=1;i<=N;i++)
		for (j=1;j<=N;j++)
			for (k=1;k<=N;k++)
				Add(i,j,k);
	for (i=0;i<=MOD;i++)
		for(j=0;j<H[i].size();j++)
		{
			Out=Search(Sum-H[i][j].S);
			if (Out.b)
			{
				printf("%d %d %d %d %d %d",v[H[i][j].x],v[H[i][j].y],v[H[i][j].z],v[Out.x],v[Out.y],v[Out.z]);
				return 0;
			}
		}
	printf("-1");
    return 0;
}