Cod sursa(job #56451)

Utilizator wazupPricop Mircea wazup Data 29 aprilie 2007 16:40:56
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <stdio.h>
#include <stdlib.h>
FILE *fin,*fout;
long long poz,hsize,sums[1000001],n,a[101],i,j,k,s,l,as[1000001],bs[1000001],cs[1000001];

long long find(long long val)
 {
     int i, step;
     for (step = 1; step < l; step <<= 1);
     for (i = 0; step; step >>= 1)
         if (i + step < l && sums[i + step] <= val)
            i += step;
     if (sums[i]==val)
     return i;
     else
     return 0;
 }


int sort_func(const void *a,const void *b)
{
 return *((long long *)a)-*((long long *)b);
}

int main()
{
 fin=fopen("loto.in","rt");
 fout=fopen("loto.out","wt");
 fscanf(fin,"%lld %lld",&n,&s);
 for (i=1;i<=n;i++)
    fscanf(fin,"%lld",&a[i]);
 l=1;
 for (i=1;i<=n;i++)
    for (j=1;j<=n;j++)
       for (k=1;k<=n;k++)
         {sums[l]=a[i]+a[j]+a[k];
          as[l]=a[i];
          bs[l]=a[j];
          cs[l]=a[k];
          l++;
         }
 l--;
 qsort(sums+1,l,sizeof(sums[1]),sort_func);
 for (i=1;i<=l;i++)
       { poz=find(s-sums[i]);
         if (poz)
         { fprintf(fout,"%lld %lld %lld %lld %lld %lld\n",as[i],bs[i],cs[i],as[poz],bs[poz],cs[poz]);
           return 0;
         }
       }
 fprintf(fout,"-1\n");
 return 0;
}