Cod sursa(job #1113497)

Utilizator mucenic_b101Bogdan Mucenic mucenic_b101 Data 20 februarie 2014 17:35:41
Problema Loto Scor 55
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <cstdio>
#include <vector>
#define MAXN 101
#define MOD 1100007
using namespace std;

vector <int> a1[MOD+1];
vector <int> a2[MOD+1];
vector <int> a3[MOD+1];

int v[MAXN];

inline int finds( int sum ) {
    int m = sum % MOD;
    for( int i = 0 ; i < a1[m].size() ; ++i )
        if( a1[m][i] + a2[m][i] + a3[m][i] == sum )
            return i;
    return -1;
}

int main () {
    FILE *f, *g;
    f = fopen( "loto.in", "r" );
    g = fopen( "loto.out", "w" );

    int n, s, sum, m, gasit, p;

    fscanf( f, "%d%d", &n, &s );

    for( int i = 0 ; i < n ; ++i )
        fscanf( f, "%d", &v[i] );

    for( int i = 0 ; i < n ; ++i )
        for( int j = 0 ; j < n ; ++j )
            for( int k = 0 ; k < n ; ++k ) {
                sum = v[i] + v[j] + v[k];
                m = sum % MOD;
                a1[m].push_back(v[i]);
                a2[m].push_back(v[j]);
                a3[m].push_back(v[k]);
            }

    gasit = 0;
    for( int i = 0 ; i < n && !gasit ; ++i )
        for( int j = 0 ; j < n && !gasit ; ++j )
            for( int k = 0 ; k < n && !gasit ; ++k ) {
                sum = s - v[i]-v[j]-v[k];
                if( sum ) {
                    m = sum % MOD;
                    p = finds( sum );
                    if( p != -1 ) {
                        gasit = 1;
                        fprintf( g, "%d %d %d %d %d %d\n", v[i], v[j], v[k], a1[m][p], a2[m][p], a3[m][p] );
                    }
                }
            }
    if( !gasit )
        fprintf( g, "-1\n" );

    fclose( f );
    fclose( g );
    return 0;
}