Cod sursa(job #141060)

Utilizator yonutzTalos Ionut yonutz Data 22 februarie 2008 18:34:22
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
 #include <stdio.h>     
 #include <stdlib.h>     
 #include <algorithm>     
      
 using namespace std;     
      
 long xp, poz, p, saux, ii, jj, kk, i, j, k, n, suma, a[100], s[1000000], nr;     
      
 int main()     
{     
  freopen("loto.in",  "r", stdin),     
  freopen("loto.out", "w", stdout);     
       
  scanf("%ld %ld", &n, &suma);     
  for ( i = 1; i <= n; ++i)     
    scanf("%ld", a+i);     
       
     
  nr = 1;     
  for ( i = 1; i <= n; ++i)     
   for ( j = i; j <= n; ++j)     
      for ( k = j; k <= n; ++k)     
       s[nr++] = a[i] + a[j] + a[k];     
  nr--;     
     
 sort(s, s+nr);     
         
  for ( p = 1; p < nr; p <<= 1);     
     
  for ( i = 1; i <= n; ++i)     
    for ( j = i; j <= n; ++j)     
      for ( k = j; k <= n; ++k)     
       {     
        saux = suma - a[i] - a[j] - a[k];     
         xp = p;     
         for ( poz = 0; xp; xp >>= 1)     
           if ( poz+xp <= nr && s[poz+xp] <= saux)     
            poz += xp;     
         if ( s[poz] == saux)     
           for ( ii = 1; ii <= n; ++ii)     
             for ( jj = ii; jj <= n; ++jj)     
              for (kk = jj; kk <= n; ++kk)     
                 if ( a[ii]+a[jj]+a[kk] == saux)      
                   {     
                     printf("%ld %ld %ld %ld %ld %ld", a[i], a[j], a[k], a[ii], a[jj], a[kk]);     
                    exit(0);     
                   }     
       }     
     
  printf("-1");     
     
  return 0;     
}