Cod sursa(job #2626385)

Utilizator andrei-cosmin.bujorBujor Andrei-Cosmin andrei-cosmin.bujor Data 6 iunie 2020 14:05:26
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb

#include<cstdio>
#include<algorithm>
using namespace std;
long long b[1000007];
long a[107];
long n,s,u;
inline bool bs(long long val)
{
	long st=1,dr=u,med;
	while (st<=dr)
	{
		med=(st+dr)/2;
		if (b[med]==val)
			return 1;
		if (b[med]<val)
			st=med+1;
		else
			dr=med-1;
	}
	if (b[med]==val)
		return 1;
	return 0;
}
int main()
{
	long i,j,k,i1,j1,k1;
	freopen("loto.in","r",stdin);
	freopen("loto.out","w",stdout);
	scanf("%ld %ld",&n,&s);
	for (i=1;i<=n;i++)
		scanf("%ld",&a[i]);

	for (i=1;i<=n;i++)
		for (j=i;j<=n;j++)
			for (k=j;k<=n;k++)
				b[++u]=a[i]+a[j]+a[k];
	sort(b+1,b+u+1);
	for (i=1;i<=u;i++)
		if (bs(s-b[i])==1)
		{bool ok=0;
           for (i1=1;i1<=n&&ok==0;i1++)
              for (j1=i1;j1<=n&&ok==0;j1++)
                 for (k1=j1;k1<=n&&ok==0;k1++)
                    if (a[i1]+a[j1]+a[k1]==b[i])
                        printf("%ld %ld %ld ",a[i1],a[j1],a[k1]),ok=1;
			for (i1=1;i1<=n;i1++)
              for (j1=i1;j1<=n;j1++)
                for (k1=j1;k1<=n;k1++)
                    if (a[i1]+a[j1]+a[k1]==s-b[i])
						{
                        printf("%ld %ld %ld\n",a[i1],a[j1],a[k1]);
                        return 0;
						}
		}
	printf("-1");
	return 0;
}