Cod sursa(job #955715)

Utilizator Paula-ElenaPaula-Elena Margarit Paula-Elena Data 1 iunie 2013 13:12:13
Problema Loto Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 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;

struct loto
{
    int val, i1, i2, i3;
    loto(int a, int b, int c, int d) : val(a), i1(b), i2(c), i3(d) {}
};
vector <loto> has[mod];

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

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(loto(sum, 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];
                aux = sum%mod;
                aux1 = (S-sum)%mod;
                x = cautare(aux1, S-sum);
                if(x != -1)
                {
                    fout << v[has[aux1][x].i1] << " " << v[has[aux1][x].i2] << " " << v[has[aux1][x].i3] << " " << v[i] << " " << v[j] << " " << v[k];
                    return 0;
                }
            }
    fout << -1;

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

    return 0;
}