Cod sursa(job #120059)

Utilizator taloibogdanTaloi Bogdan Cristian taloibogdan Data 4 ianuarie 2008 09:24:40
Problema Loto Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<stdio.h>
long n,ss,s[1000000],i,i1,i2,a[111],j,aa,nn,x[1000000],x1[1000000],x2[1000000],poz,st,dr,m;
int main()
{freopen("loto.in","r",stdin);
freopen("loto.out","w",stdout);
scanf("%ld %ld",&n,&ss);
s[0]=0;
for(i=1;i<=n;++i)
  scanf("%ld",&a[i]);
nn=0;
for(i=1;i<=n;++i)
   for(i1=1;i1<=n;++i1)
      for(i2=1;i2<=n;++i2)
	 {s[++nn]=a[i]+a[i1]+a[i2];x[nn]=i;x1[nn]=i1;x2[nn]=i2;}
for(i=1;i<nn;++i)
   for(j=i+1;j<=nn;++j)
      if(s[i]>s[j]){aa=x1[i];x1[i]=x1[j];x1[j]=aa;aa=x2[i];x2[i]=x2[j];x2[j]=aa;aa=x[i];x[i]=x[j];x[j]=aa;aa=s[i];s[i]=s[j];s[j]=aa;}
poz=-1;
for(i=1;i<=nn;++i)
   {st=1;dr=nn;
    while(st<=dr)
	 {m=(st+dr)/2;
	  if (s[m]+s[i]==ss) {poz=m; break;}
		  else if (s[m]+s[i]>ss) dr=m-1;
				    else st=m+1;
	 }
    if(poz>=0) {printf("%ld %ld %ld %ld %ld %ld",a[x[i]],a[x1[i]],a[x2[i]],a[x[poz]],a[x1[poz]],a[x2[poz]]);break;}
   }
if(poz==-1) printf("-1");
fcloseall();
return 0;
}