Cod sursa(job #129104)

Utilizator tErMyAndrei Panturu tErMy Data 28 ianuarie 2008 17:31:56
Problema Loto Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
 #include <cstdio>  
 #define maxn 127321  
 struct nod { int a, b, c;nod(){}; nod(int _a, int _b, int _c){a=_a, b=_b, c=_c;};};  
 nod H[maxn][23];  
   
 inline void insert(int a, int b, int c)  
 {  
     int v=a+b+c;  
     int h1=v%maxn;  
     int h2=v%23;  
     H[h1][h2]=nod(a, b, c);  
 }  
 int A, B, C;  
 inline int find(int v)  
 {  
     if(v<0) return 0;  
     int h1=v%maxn;  
     int h2=v%23;  
     int a=H[h1][h2].a, b=H[h1][h2].b, c=H[h1][h2].c;  
     if(a+b+c==v) { A=a; B=b; C=c; return 1;}  
     return 0;  
 }  
   
 int main()  
 {  
     int a[128];  
     int n, S, i, j, k;  
     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=1;j<=n;++j)  
             for(k=1;k<=n;++k) insert(a[i], a[j], a[k]);  
   
     int s;  
     for(i=1;i<=n;++i)  
         for(j=1;j<=n;++j)  
             for(k=1;k<=n;++k)  
             {  
                 s=S-a[i]-a[j]-a[k];   
                 if(find(s))  
                 {  
                     printf("%d %d %d %d %d %d\n", a[i], a[j], a[k], A, B, C);  
                     return 0;  
                 }  
             }         
     printf("-1\n");   
     return 0;  
 }