Cod sursa(job #1765269)

Utilizator ReksioCroftOctavian Florin Staicu ReksioCroft Data 26 septembrie 2016 15:45:32
Problema Loto Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <stdio.h>
#define nmax 100
#define mod 702113
int v[nmax];
typedef struct{
    int val, next, a, b, c;
}nod;
nod loto[nmax*nmax*nmax];
int hash[mod];
int poz;

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].a = i;
    loto[poz].b = j;
    loto[poz].c = k;
    loto[poz].next = hash[nr%mod];
    hash[nr%mod] = poz;
}

int main()
{
    int n, i, j, k, s, ok, sum;
    FILE *fin, *fout;
    fin = fopen( "loto.in", "r" );
    fscanf( fin, "%d%d", &n, &s );
    for( i=0; i<n; i++ )
        fscanf( fin, "%d", &v[i] );
    fclose( fin );
    fout = fopen( "loto.out", "w" );
    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 ){
                    fprintf( fout, "%d %d %d %d %d %d\n", v[ loto[ok].a ], v[ loto[ok].b ], v[ loto[ok].c ], v[i], v[j], v[k] );
                }
            }
        }
    }
    if( ok==0 )
        fprintf( fout, "-1\n" );
    fclose( fout );
    return 0;
}