Cod sursa(job #1417382)

Utilizator eu3neuomManghiuc Teodor-Florin eu3neuom Data 10 aprilie 2015 11:34:43
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

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];

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

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++){
                if(v[i] + v[j] + v[k] < s){
                    int ad = v[i] + v[j] + v[k];
                    int rd = ad % SMAX;
                    node ans;
                    ans.sum = ad;
                    ans.x = i;
                    ans.y = j;
                    ans.z = 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) == val){
                    fout << v[i] << " " << v[j] << " " << v[k];
                    return 0;
                }
            }
        }
    }
    fout << -1;
    return 0;
}