Cod sursa(job #349802)

Utilizator zloteanu.adrianzloteanu adrian nichita zloteanu.adrian Data 21 septembrie 2009 16:23:31
Problema Loto Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <stdio.h>
#include <stdlib.h>
int a1,a2,a3,n,s,a[110],b[1001000];
int cmp(const void *p, const void *q)
{return ( *(int*)p - *(int*)q );}
int main()
{freopen("loto.in","r",stdin);
freopen("loto.out","w",stdout);
scanf("%d%d",&n,&s);
int i,j,k,l;
for (i=1; i<=n; ++i) scanf("%d",&a[i]);
  l=0;
for (i=1; i<=n; ++i)
 for (j=i; j<=n; ++j)
  for (k=j; k<=n; ++k)
    b[++l]=a[i]+a[j]+a[k];
qsort(b+1,l, sizeof(int),cmp);
k=l;
for (i=1; i<=l && 0<k; ++i)
{
  while(b[i]+b[k]>s && k>0) k--;
  if(k<=0)
  break;
  if(b[i]+b[k]==s)
    {for(a1=1;a1<=n;++a1)
       for (a2=a1; a2<=n; ++a2)
	 for (a3=a2; a3<=n; ++a3)
	   if (a[a1]+a[a2]+a[a3]==b[i])
	    printf("%d %d %d ",a[a1],a[a2],a[a3]);

   for(a1=1;a1<=n;++a1)
     for (a2=a1; a2<=n; ++a2)
       for (a3=a2; a3<=n; ++a3)
	 if (a[a1]+a[a2]+a[a3]==b[k])
	  printf("%d %d %d ",a[a1],a[a2],a[a3]);
return 0;}}
printf("-1\n");
return 0;
}