Cod sursa(job #2592993)

Utilizator AlexBolfaAlex Bolfa AlexBolfa Data 2 aprilie 2020 18:01:34
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <bits/stdc++.h>
#define NMAX (int)(104)
#define MOD 666013
#define all(x) x.begin(),x.end()
#define rep(i, l, r) for(int i = l; i < r; ++i)
#define rev(i, r, l) for(int i = r - 1; i >= l; --i)
#define ft first
#define sd second
#define pb push_back
using namespace std;
typedef long long ll;
typedef pair <int, int> pii;
ifstream fin("loto.in");
ofstream fout("loto.out");

int n,v[NMAX],s,id;
pair <int, pii> sum[NMAX*NMAX*NMAX];

struct hashTable{
    int find(int x){
        int temp=x;
        x=x%MOD;
        for(auto it:H[x])
            if(it.ft == temp)
                return it.sd;
        return -1;
    }
    void insert(int x, int id){
        int temp=x;
        x=x%MOD;
        for(auto it:H[x])
            if(it.ft == temp)
                return;
        H[x].pb({temp, id});
    }
    vector <pii> H[MOD];
};

hashTable H;

int main(){
    fin>>n>>s;
    rep(i, 0, n)
        fin>>v[i];
    rep(i, 0, n)
        rep(j, 0, n)
            rep(k, 0, n){
                int t=v[i]+v[j]+v[k];
                if(t > s) continue;
                sum[id]={i, {j, k}};
                H.insert(t, id);
                ++id;

                int x=H.find(s-t);
                if(x >= 0){
                    fout<<v[i]<<' '<<v[j]<<' '<<v[k]<<' '<<
                            v[sum[x].ft]<<' '<<v[sum[x].sd.ft]<<' '<<v[sum[x].sd.sd]<<'\n';
                    return 0;
                }
            }
    fout<<-1;
    return 0;
}