Cod sursa(job #575485)

Utilizator GaborGabrielFMI - GabrielG GaborGabriel Data 8 aprilie 2011 13:05:38
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <fstream.h>
#include <algorithm>
using namespace std;
ifstream f("loto.in");
ofstream g("loto.out");
int n,s,v[101];
int i,j,k,sf=0,valoare;
struct nod
{
	int nr;
	int a,b,c;
} vs[101];

int cautare_binara(int stanga, int k)
{
	int	st=stanga;
	int dr=sf;
	int mij;
	while(st<=dr)
	{
		mij=(st+dr)/2;
		if(vs[k].nr+vs[mij].nr==s)
		{
			g<<vs[k].a<<' '<<vs[k].b<<' '<<vs[k].c<<' '<<vs[mij].a<<' '<<vs[mij].b<<' '<<vs[mij].c<<'\n';
			return 1;
		}
		if(vs[k].nr+vs[mij].nr<s)
			dr=mij-1;
		else
			if(vs[k].nr+vs[mij].nr>s)
				st=mij+1;
	}
	return 0;
}

int main()
{	
	f>>n>>s;
	for(i=1;i<=n;i++)	
		f>>v[i];
	sort(v+1,v+n+1);
	for(i=1;i<=n;i++)
		for(j=i;j<=n;j++)
			for(k=j;k<=n;k++)
			{
				vs[++sf].nr=v[i]+v[j]+v[k];
				vs[sf].a = v[i];
				vs[sf].b = v[j];
				vs[sf].c = v[k];
			}	
	for(i=1;i<=sf;i++)
	{		
		if(cautare_binara(i+1,i))
			break;
		if(i==sf)
			g<<-1<<'\n';
	}
	f.close();
	g.close();
	return 0;
}