Cod sursa(job #2932284)

Utilizator stef63Stefan Sebastian Niculae stef63 Data 2 noiembrie 2022 15:38:23
Problema Loto Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("loto.in");
ofstream fout("loto.out");
const int mod=1008001;
vector <int> h[mod];
void update(int x){
    int poz=x%mod;
    h[poz].push_back(x);
}
bool query(int x){
    int poz=x%mod;
    for(int i=0;i<h[poz].size();i++){
        if(h[poz][i]==x){
            return true;
        }
    }
    return false;
}
int v[102],su[1000002];
int main(){
    int s,n,si=0,o=0;
    bool ok1=0,ok2=0,ok=0;
    fin>>n>>s;
    for(int i=0;i<n;i++){
        fin>>v[i];
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            for(int k=0;k<n;k++){
                su[o]=v[i]+v[j]+v[k];
                update(su[o]);
                o++;
            }
        }
    }
    for(int i=0;i<(n*n*n);i++){
        si=su[i];
        if(query(s-si)){
            ok=1;
            break;
        }
    }
    if(!ok){
        fout<<"-1";
        return 0;
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            for(int k=0;k<n;k++){
                if(!ok1){
                    if(v[i]+v[j]+v[k]==si){
                        fout<<v[i]<<" "<<v[j]<<" "<<v[k]<<" ";
                        ok1=1;
                    }
                }
                if(!ok2){
                    if(v[i]+v[j]+v[k]==(s-si)){
                        fout<<v[i]<<" "<<v[j]<<" "<<v[k]<<" ";
                        ok2=1;
                    }
                }
                if(ok1&&ok2){
                    return 0;
                }
            }
        }
    }
    fout<<"-1";
    return 0;
}