Cod sursa(job #81192)

Utilizator ScrazyRobert Szasz Scrazy Data 31 august 2007 18:38:31
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <stdio.h>
#include <algorithm>
#define NMax 103
using namespace std;

long n, bb;
long p[NMax], db;
long a[NMax*NMax*NMax][3], e[NMax*NMax*NMax];
long S, pS, ppS, x[7];


long binary(long val)
{
    long long i, step;
    for (step = 1; step < db; step <<= 1);

    for (i=0; step; step >>= 1)
	if (i+step < db && e[i+step] <= val)
	    i+=step;
    return i;
}


int main()
{
    freopen("loto.in","r",stdin);
    freopen("loto.out","w",stdout);

    long i, j, k; 
    
    db=0;
    
    scanf("%ld %ld", &n, &S);
    for (i=1; i<=n; ++i)
	scanf("%d", &p[i]);

    for (i=1; i<=n; ++i)
	for (j=1; j<=n; ++j)
	    for (k=1; k<=n; ++k)
	    {
		e[++db]=p[i]+p[j]+p[k];
		a[db][0]=i;
		a[db][1]=j;
		a[db][2]=k;
	    }

    sort(e+1,e+db);

    for (i=1; i<=n; ++i)
	for (j=1; j<=n; ++j)
	    for (k=1; k<=n; ++k)
	    {
		pS=p[i]+p[j]+p[k];
		ppS=S-pS;
                
		bb=binary(ppS);

		pS+=e[bb];

		if (S==pS)
		{

		    x[1]=p[i];
		    x[2]=p[j];
		    x[3]=p[k];
		    x[4]=a[bb][0];
		    x[5]=a[bb][1];
		    x[6]=a[bb][2];
		    sort(x+1,x+7);
		    for (int l=1; l<=6; ++l)
			printf("%ld ", x[l]);

		    fclose(stdin);
		    fclose(stdout);
		    return 0;
		}

	    }

    printf("-1\n");

    fclose(stdin);
    fclose(stdout);

    return 0;
}