Mai intai trebuie sa te autentifici.

Cod sursa(job #1579984)

Utilizator CraiuAndrei Craiu Craiu Data 25 ianuarie 2016 12:08:16
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.86 kb
#include <bits/stdc++.h>
#define P 123457

using namespace std;

int n, v[105], s;
struct has
{
    int val, x, y, z;
};

vector <has> h[P];

inline void Inserare(has w)
{
    int r, L, i;
    r = w.val % P;
    L = h[r].size();
    for(i = 0; i < L; i++)
        if(h[r][i].val == w.val) return;
    h[r].push_back(w);
}

inline has Cautare(has w)
{
    int i, r, L;
    has w1;
    r = w.val % P;
    L = h[r].size();
    for(i = 0; i < L; i++)
        if(h[r][i].val == w.val) return h[r][i];
    w1.val = -1;
    return w1;
}

void Citire()
{
    int i;
    ifstream fin("loto.in");
    fin >> n >> s;
    for(i = 1; i <= n; i++)
        fin >> v[i];
    fin.close();
}

void Rezolva()
{
    ofstream fout("loto.out");
    int i, j, k;
    has w, w1;
    for(i = 1; i <= n; i++)
        for(j = 1; j <= n; j++)
            for(k = 1; k <= n; k++)
            {
                w.val = v[i] + v[j] + v[k];
                w.x = i;
                w.y = j;
                w.z = k;
                Inserare(w);
            }
    for(i = 1; i <= n; i++)
        for(j = 1; j <= n; j++)
            for(k = 1; k <= n; k++)
            {
                w.val = s - (v[i] + v[j] + v[k]);
                w.x = i;
                w.y = j;
                w.z = k;
                if(w.val >= 0)
                {
                    w1 = Cautare(w);
                    if(w1.val != -1)
                    {
                        fout << v[i] << " " << v[j] << " " << v[k];
                        fout <<" "<<v[w1.x] << " "<<v[w1.y] << " "<<v[w1.z];
                        fout << "\n";
                        fout.close();
                        return;
                    }
                }
            }
    fout << "-1\n";
    fout.close();
}

int main()
{
    Citire();
    Rezolva();
    return 0;
}