Cod sursa(job #220207)

Utilizator yoyolichIoana Ardeleanu yoyolich Data 9 noiembrie 2008 20:17:14
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.67 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;
}