Cod sursa(job #444902)

Utilizator siminescuPaval Cristi Onisim siminescu Data 22 aprilie 2010 01:13:47
Problema Loto Scor 95
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;
	citire();
	sort(v+1,v+1+v[0]);
	freopen("loto.out","w",stdout);
	for(i=1;i<=v[0]&&v[i]<=s;i++)
	{
		ss=s-v[i];
		st=1;dr=v[0];
		while(st<dr)
		{
			m=(st+dr)/2;
			if(v[m]==ss)
			{
				int j,k,l,ok1=0,ok2=0;
				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]==v[i]&&!ok1)
							{printf("%d %d %d ",a[j],a[k],a[l]);ok1=1;}
							if(a[l]+a[k]+a[j]==ss&&!ok2)
							{printf("%d %d %d ",a[j],a[k],a[l]);ok2=1;}
							if(ok1&&ok2)
								return 0;
						}
			}
			if(v[m]<ss)
				st=m+1;
			else
				dr=m;
		}
	}
	printf("-1\n");
}