Cod sursa(job #2233776)

Utilizator Alexandru_StoianStoian Sorin Alexandru Alexandru_Stoian Data 24 august 2018 14:02:07
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <bits/stdc++.h>

using namespace std;

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

struct pz{
    int x, y, z, val;
};
const int md=666013;
int n, suma, x[101];
vector<pz>hatz[md+1];


vector<pz>::iterator verif(int val2){
    vector<pz>::iterator iter;
    int poz=val2%md;
    for(iter=hatz[poz].begin(); iter!=hatz[poz].end(); ++iter)
        if(iter->val==val2) return iter;
    return hatz[poz].end();
}

void adc(int val, int x, int y, int z){
    int poz=val%md;
    hatz[poz].push_back({x, y, z, val});
}
int main()
{
    f>>n>>suma;
    for(int i=1; i<=n; ++i) f>>x[i];
    for(int i=1; i<=n; ++i){
        for(int j=i; j<=n; ++j){
            for(int k=j; k<=n; ++k){
                int val=x[i]+x[j]+x[k];
                adc(val, i, j, k);
            }
        }
    }
    for(int i=1; i<=n; ++i){
        for(int j=i; j<=n; ++j){
            for(int k=j; k<=n; ++k){
                int val=suma-x[i]-x[j]-x[k];
                if(val>0){
                    vector<pz>::iterator iter=verif(val);
                    if(iter!=hatz[val%md].end())
                    {
                        g<<x[iter->x]<<" "<<x[iter->y]<<" "<<x[iter->z]<<" "<<x[i]<<" "<<x[j]<<" "<<x[k]<<"\n";
                        return 0;
                    }
                }
            }
        }
    }
    g<<-1<<"\n";
    return 0;
}