Cod sursa(job #1417443)

Utilizator eu3neuomManghiuc Teodor-Florin eu3neuom Data 10 aprilie 2015 12:43:56
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.86 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>

using namespace std;

ifstream fin("loto.in");
ofstream fout("loto.out");

const int SMAX = 666013;
const int NMax = 105;
struct node{
    int sum,x,y,z;
};
vector < node > a[SMAX];
int v[NMax];

bool cauta(int val){
    if(val > 0){
        int rd = val % SMAX;
        for(int i = 0; i < a[rd].size(); i++){
            if(a[rd][i].sum == val){
                fout << a[rd][i].x << " " << a[rd][i].y << " " << a[rd][i].z << " ";
                return 1;
            }
        }
    }
    return 0;
}

int main()
{
    int n,s;
    fin >> n >> s;
    for(int i = 1; i <= n; i++){
        fin >> v[i];
    }
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= n; j++){
            for(int k = 1; k <= n; k++){
                int gh = v[i] + v[j] + v[k];
                if(gh < s){
                    int rd = gh % SMAX;
                    int l;
                    for(l = 0; l < a[rd].size(); l++){
                        if(a[rd][l].sum == gh){
                            l = SMAX;
                        }
                    }
                    if(l < SMAX){
                        node ans;
                        ans.sum = gh;
                        ans.x = v[i];
                        ans.y = v[j];
                        ans.z = v[k];
                        a[rd].push_back(ans);
                    }
                }
            }
        }
    }
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= n; j++){
            for(int k = 1; k <= n; k++){
                int val = s - v[i] - v[j] - v[k];
                if(cauta(val)){
                    fout << v[i] << " " << v[j] << " " << v[k];
                    return 0;
                }
            }
        }
    }
    fout << -1;
    return 0;
}