Cod sursa(job #559223)

Utilizator GeorgeGradinariuGradinariu George GeorgeGradinariu Data 17 martie 2011 18:11:59
Problema Loto Scor 65
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include<fstream>
#include<vector>
#include<iterator>
#include<algorithm>
using namespace std;
#define Nmax 101
struct nod{int s,a,b,c;};
vector<nod>v;
vector<int>::iterator it;
int N,S,nr[Nmax],mid,sol,ok;


void citire()
{
	ifstream in("loto.in");
	in>>N>>S;
	for(int i=1;i<=N;i++)
		in>>nr[i];
}


int cmp (nod x, nod y)
{
	return x.s<y.s;
	
}

int cmp2(int x, nod y)
{
	return x==y.s;
}

int cbin(int X,int min,int max)
{
	if(max<min)
		return 0;
	mid=(max+min)/2;
	
	if(v[mid].s>X)
		return cbin(X,min,mid-1);
	else
		if(v[mid].s<X)
			return cbin(X,mid+1,max);
		else
			if(v[mid].s==X)
				return mid;
}
void solve()
{
	ofstream out("loto.out");
	int i,j,k;
	nod p;
	for(i=1;i<=N;i++)
		for(j=i;j<=N;j++)
			for(k=j;k<=N;k++)
			{
				p.a=nr[i];
				p.b=nr[j];
				p.c=nr[k];
				p.s=nr[i]+nr[j]+nr[k];
				v.push_back(p);
				
			}
	
	sort (v.begin(),v.end(),cmp);
	int *P;
	int x;
	for(i=0;i<v.size();i++)
	{
		x=S-v[i].s;
		P=&x;
		sol=cbin(x,1,v.size()-1);
		if(sol!=0)
		{
			
			out<<v[i].a<<" "<<v[i].b<<" "<<v[i].c<<" "<<v[sol].a<<" "<<v[sol].b<<" "<<v[sol].c;
			break;
			ok=1;
		}
		
	}
	/*if(ok==1)
		out<<-1;*/
}

int main()
{
	citire();
	solve();
	//ofstream out("loto.out");
	int i,l;
	l=v.size();

	/*for( i=0;i<l;i++)
		out<<v[i].a<<" "<<v[i].b<<" "<<v[i].c<<" "<<v[i].s<<endl;*/
	
}