Cod sursa(job #129131)

Utilizator pishtymatei silviu pishty Data 28 ianuarie 2008 18:03:55
Problema Loto Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 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;     
}