Cod sursa(job #1282177)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 3 decembrie 2014 23:34:53
Problema Loto Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I Marime 1 kb
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
int a[105],n,s,contor;
struct Suma{int s,x1,x2,x3;};
Suma sum[1000005];

inline bool Ordonare(const Suma A,const Suma B)
{
	return A.s<B.s;
}

int main()
{
	int i,j,k;
	int st,dr,m,x;
	freopen("loto.in","r",stdin);
	scanf("%d %d",&n,&s);
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);
	for(i=0;i<n;i++)
		for(j=i;j<n;j++)
			for(k=j;k<n;k++)
			{
				sum[contor].s=a[i]+a[j]+a[k];
				sum[contor].x1=a[i];
				sum[contor].x2=a[j];
				sum[contor].x3=a[k];
				contor++;
			}
	sort(sum,sum+contor,Ordonare);
	freopen("loto.out","w",stdout);
	for(i=0;i<contor;i++)
	{
		st=0;
		dr=contor-1;
		x=s-sum[i].s;
		while(st<=dr)
		{
			m=((st+dr)>>1);
			if(sum[m].s==x)
			{
				printf("%d %d %d ",sum[i].x1,sum[i].x2,sum[i].x3);
				printf("%d %d %d\n",sum[m].x1,sum[m].x2,sum[m].x3);
				return 0;
			}
			else
				if(sum[m].s>x)
					dr=m-1;
				else
					st=m+1;
		}
	}
	printf("-1\n");
	return 0;
}