Cod sursa(job #179439)

Utilizator lamez0rBogdan Bondor lamez0r Data 15 aprilie 2008 22:06:27
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include<stdio.h>
#include<algorithm>
using namespace std;
long s,v[101];
int n;

int comp (suma a, suma b)
    { return a.s<b.s; }

struct suma {
	    long s,x,y,z;
	    } S[200000],aux;

/*int pozitie (int s, int d)
    {
    while (s<d)
	  {
	  while (s<d && S[s].s<=S[d].s)
		s++;
	  aux=S[s];
	  S[s]=S[d];
	  S[d]=aux;
	  while (s<d&&S[d].s>=S[s].s)
		d--;
	  aux=S[s];
	  S[s]=S[d];
	  S[d]=aux;
	  }
    //S[s]=aux;
    return s;
    }


void quick (int s, int d)
     {
     int p;
     if (s>d)
	{
	p=pozitie(s,d);
	quick(s,p-1);
	quick(p+1,d);
	}
     }*/


int main ()
{
int i,j,k,poz=0,mij,val,a,b,c;
freopen ("loto.in","rt",stdin);
freopen ("loto.out","wt",stdout);
scanf("%d%ld",&n,&s);
for (i=1;i<=n;++i)
    scanf("%d",&v[i]);
for (i=1;i<=n;++i)
    for (j=i;j<=n;++j)
	for (k=j;k<=n;++k)
	    {
	    S[++poz].s=v[i]+v[j]+v[k];
	    S[poz].x=v[i];
	    S[poz].y=v[j];
	    S[poz].z=v[k];
	    }
sort (S+1,S+poz+1,comp);
for (i=1;i<=poz;++i)
    {
    val=s-S[i].s;
    a=i;
    b=poz;
    while (a<=b)
	  {
	  c=(a+b)/2;
	  if (S[c].s==val)
	     {
	     //FILE *f=fopen("loto.out","w");
	     printf("%ld %ld %ld %ld %ld %ld",S[i].y,S[i].z,S[i].x,S[c].x,S[c].y,S[c].z);
	     //fclose(f);
	     return 0;
	     }
	  else
	     if (S[c].s>val)
		b=c-1;
	     else
		a=c+1;
	  }

    }
//f=fopen("loto.out","w");
printf("-1");
//fclose(f);
return 0;
}