Cod sursa(job #253183)

Utilizator 630r63Ilinca George Mihai 630r63 Data 5 februarie 2009 15:24:44
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.98 kb
  #include <cstdio>   
   #define maxh 666013  
   struct nod{ int x; nod *leg;};  
     
   nod *H[maxh];  
     
   inline void insert(int v)  
   {  
               int h=v%maxh;  
               nod *p=new nod;  
               p->x=v;  
               p->leg=H[h];  
               H[h]=p;  
   }  
     
   inline int find(int v)  
   {  
               int h=v%maxh;  
               for(nod *p=H[h]; p; p=p->leg)  
                           if(p->x == v) return 1;  
               return 0;  
   }  
     
   int a[128], n, S;  
    
   int main()  
   {  
                 
               int i, j, k;  
               int ii, jj, kk;  
                 
               freopen("loto.in","r",stdin);  
               freopen("loto.out","w",stdout);  
                 
               scanf("%d %d\n", &n, &S);  
               for(i=1; i<=n; ++i) scanf("%d ", a+i);  
                 
               for(i=1; i<=n; ++i)  
                           for(j=i; j<=n; ++j)  
                                       for(k=j; k<=n; ++k)  
                                                   insert(a[i]+a[j]+a[k]);  
                                         
                             
               for(i=1; i<=n; ++i)  
                           for(j=i; j<=n; ++j)  
                                       for(k=j; k<=n; ++k)  
                                                   if(S-a[i]-a[j]-a[k] >= 0)  
                                                               if(find(S-a[i]-a[j]-a[k]))  
                                                               {  
                                                                           printf("%d %d %d ", a[i], a[j], a[k]);  
                                                                 
                                                                           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]==S-a[i]-a[j]-a[k])  
                                                                                                               {  
                                                                                                                           printf("%d %d %d\n", a[ii], a[jj], a[kk]);  
                                                                                                                           return 0;  
                                                                                                               }  
                                                               }  
                                                     
               printf("-1\n");  
                 
               return 0;  
   }