Cod sursa(job #1803242)

Utilizator mateicosCostescu Matei mateicos Data 11 noiembrie 2016 09:59:58
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <cstdio>
#define nmax 100
#define mod 702113
#define pozmax 338351
int v[nmax];
typedef struct{
    int val, next, comp;
}nod;
nod loto[pozmax];
int hash[mod];
int poz, n;

int cauta( int nr ){
    int pozlist = hash[ nr % mod ];
    while( pozlist!=0 && loto[pozlist].val!=nr )
        pozlist = loto[pozlist].next;
    return pozlist;
}

void insert( int nr, int i, int j, int k ){
    loto[++poz].val = nr;
    loto[poz].comp = n*n*i + n*j + k;
    loto[poz].next = hash[nr%mod];
    hash[nr%mod] = poz;
}

int main()
{
    int i, j, k, s, ok, sum;
    freopen( "loto.in", "r", stdin );
    scanf("%d%d", &n, &s );
    for( i=0; i<n; i++ )
        scanf(  "%d", &v[i] );
    freopen( "loto.out", "w", stdout );
    ok = 0;
    for( i=0; i<n && ok==0; i++ ){
        for( j=i; j<n && ok==0; j++ ){
            for( k=i; k<n && ok==0; k++ ){
                sum = v[i] + v[j] + v[k];
                insert( sum, i, j, k );
                if( s>sum )
                    ok = cauta( s - sum );
                if( ok!=0 ){
                    printf( "%d %d %d %d %d %d\n", v[ (loto[ok].comp) / (n*n) ], v[ (loto[ok].comp/n)%n ], v[ loto[ok].comp%n ], v[i], v[j], v[k] );
                }
            }
        }
    }
    if( ok==0 )
        printf(  "-1\n" );
    return 0;
}