Cod sursa(job #316238)

Utilizator warchildmdMihail Burduja warchildmd Data 18 mai 2009 21:31:17
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.61 kb
#include<stdio.h>
#define NMAX 1024
#define MOD 666013

struct nod
{
    int sum;
    nod *next;
};

typedef nod * pNode;

pNode LIST[MOD];
int N, A[NMAX], L;

int find(int v)
{
    pNode c=LIST[v%MOD];
    if(!c)
    return 0;
    pNode p=c;
    while(p)
    {
        if(p->sum==v)
        return 1;
        p=p->next;
    }
    return 0;
}

int find_old(int v)
{
            int h=v%MOD;
            for(nod *p=LIST[h]; p; p=p->next)
                        if(p->sum == v) return 1;
            return 0;
}

void insert(int x)
{
    pNode p;
    int h=x%MOD;
    if(!find(x))
    {
        p=new nod;
        p->sum=x;
        p->next=LIST[h];
        LIST[h]=p;
    }
}

void find_next(int x, int y, int z)
{
    int i,j,k,sum;
    for(i=1;i<=N;i++)
    for(j=1;j<=N;j++)
    for(k=1;k<=N;k++)
    {
        sum=A[i]+A[j]+A[k];
        if(A[x]+A[y]+A[z]+sum==L)
        printf("%d %d %d %d %d %d\n",A[x],A[y],A[z],A[i],A[j],A[k]);
    }
}

int main()
{
    freopen("loto.in","r",stdin);
    freopen("loto.out","w",stdout);
    scanf("%d %d",&N,&L);
    int i,j,k,suma;
    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]);
    }
    for(i=1;i<=N;i++)
    for(j=1;j<=N;j++)
    for(k=1;k<=N;k++)
    {
        suma=L-A[i]-A[j]-A[k];
        if(suma>=0)
        if(find(L-A[i]-A[j]-A[k]))
        {
            //printf("found\n");
            find_next(i,j,k);
            return 0;
        }
    }
    printf("-1\n");
    return 0;
}