Cod sursa(job #955723)

Utilizator Paula-ElenaPaula-Elena Margarit Paula-Elena Data 1 iunie 2013 13:25:39
Problema Loto Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include <fstream>
#include <vector>
using namespace std;

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

const int MAXN = 110, mod = 666013;
int N, v[MAXN], S, sum, poz;
vector <int> has[mod];

int cautare(int aux, int va)
{
    int n = has[aux].size();
    for(int poz=0; poz<n; ++poz)
        if(has[aux][poz] == va)
            return true;
    return false;
}

void scrie(int sss)
{
    int i, j, k;
    for(i=0; i<N; ++i)
        for(j=0; j<N; ++j)
            for(k=0; k<N; ++k)
            {
                sum = v[i] + v[j] + v[k];
                if(sum == sss)
                {
                    fout << v[i] << " " << v[j] << " " << v[k];
                    return;
                }
            }
}

int main()
{
    int i, j, k, aux, aux1;
    int x;

    fin >> N >> S;
    for(i=0; i<N; ++i)
        fin >> v[i];

    for(i=0; i<N; ++i)
        for(j=0; j<N; ++j)
            for(k=0; k<N; ++k)
            {
                sum = v[i] + v[j] + v[k];
                aux = sum%mod;
                has[aux].push_back(sum);
            }

    for(i=0; i<N; ++i)
        for(j=0; j<N; ++j)
            for(k=0; k<N; ++k)
            {
                sum = v[i] + v[j] + v[k];
                aux1 = (S-sum)%mod;
                x = cautare(aux1, S-sum);
                if(x)
                {
                    fout << v[i] << " " << v[j] << " " << v[k] << " ";
                    scrie(S - sum);
                    return 0;
                }
            }
    fout << -1;

    fin.close();
    fout.close();

    return 0;
}