Cod sursa(job #444907)

Utilizator siminescuPaval Cristi Onisim siminescu Data 22 aprilie 2010 01:28:14
Problema Loto Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<stdio.h>
#include<algorithm>
using namespace std;
int n,s,a[101],v[1000002];
void citire()
{
	freopen("loto.in","r",stdin);
	scanf("%d%d",&n,&s);
	int i,j,k;
	for(i=1;i<=n;i++)
		scanf("%d",&a[i]);
	v[0]=0;
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			for(k=1;k<=n;k++)
				v[++v[0]]=a[i]+a[j]+a[k];
}
int main()
{
	int dr,st,m,i,ss,p,q;
	citire();
	sort(v+1,v+1+v[0]);
	freopen("loto.out","w",stdout);
	for(i=1;i<=n;i++)
		for(q=1;q<=n;q++)
			for(p=1;p<=n;p++)
	{
		ss=s-a[i]-a[q]-a[p];
		if(ss<0){printf("-1\n");return 0;}
		st=1;dr=v[0];
		while(st<dr)
		{
			m=(st+dr)/2;
			if(v[m]==ss)
			{
				printf("%d %d %d ",a[i],a[q],a[p]);
				int j,k,l;
				for(j=1;j<=n;j++)
					for(k=1;k<=n;k++)
						for(l=1;l<=n;l++)
						{
							if(a[l]+a[k]+a[j]==ss)
							{printf("%d %d %d\n",a[j],a[k],a[l]);
								return 0;}
						}
			}
			if(v[m]<ss)
				st=m+1;
			else
				dr=m;
		}
	}
	printf("-1\n");
	return 0;
}