Cod sursa(job #1443569)

Utilizator cristinamateiCristina Matei cristinamatei Data 28 mai 2015 10:29:16
Problema Loto Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("loto.in");
ofstream out("loto.out");

int M = 300000001;
int n;
int val[101], urm[101], lst[300000001], nr = 0, v[101];
long long int s;

void adauga( long long int x )
{
    int r = x % M;
    nr++;
    val[nr] = x;
    urm[nr] = lst[r];
    lst[r] = nr;
}

bool cauta( long long int x )
{
    int p = lst[x % M];
    while( p != 0 )
    {
        if ( val[p] == x )
            return true;
        p = urm[p];
    }
    return false;
}

void afiseaza( int x )
{
    int i, j, k;
    for ( i = 1; i <= n; i++ )
        for ( j = 1; j <= n; j++ )
            for ( k = 1; k <= n; k++ )
                if ( v[i] + v[j] + v[k] == x )
                {
                    out << v[i]<<' '<< v[j]<<' '<<v[k];
                    return;
                }
}

int main()
{
    int i, j, k;
    in >> n>>s;
    for ( i = 1; i <= n; i++ )
        in >> v[i];
    for ( i = 1; i <= n; i++ )
    {
        for ( j = 1; j <= n; j++ )
        {
            for ( k = 1; k <= n; k++ )
                adauga(v[i]+v[j]+v[k]);
        }
    }

    for ( i = 1; i <= n; i++ )
        for ( j = 1; j <= n; j++ )
            for ( k = 1; k <= n; k++ )
            {
                if ( cauta( s - v[i] - v[j] - v[k] ) )
                {
                    out << v[i] <<' '<<v[j]<<' '<<v[k]<<' ';
                    afiseaza(s-v[i]-v[j]-v[k]);
                    return 0;
                }
            }
    out << -1;
    return 0;
}