Cod sursa(job #2260116)

Utilizator vladm98Munteanu Vlad vladm98 Data 14 octombrie 2018 14:26:27
Problema Loto Scor 95
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin ("loto.in");
ofstream fout ("loto.out");
int v[101];
vector <pair <int, vector <int>>> hashh [1000000];

void insertt (int x, int i, int j, int k) {
    int modulo = x % 1000000;
    for (auto y : hashh[modulo]) {
        if (y.first == x) return;
    }
    vector <int> indices;
    indices.push_back(i);
    indices.push_back(j);
    indices.push_back(k);
    hashh[modulo].emplace_back(x, indices);
}

bool isIn (int x, int i, int j, int k) {
    int modulo = x % 1000000;
    for (auto current : hashh[modulo]) {
        if (current.first == x) {
            for (auto y : current.second) {
                fout << v[y] << ' ';
            }
            fout << v[i] << ' ' << v[j] << ' ' << v[k];
            return true;
        }
    }
    return false;
}


int main() {
    int n;
    int s;
    fin >> n >> s;
    for (int i = 1; i <= n; ++i) {
        fin >> v[i];
    }
    for (int i = 1; i <= n; ++i) {
        for (int j = i; j <= n; ++j) {
            for (int k = j; k <= n; ++k) {
                long long sum = 1LL * v[i] + v[j] + v[k];
                if (sum > s) continue;
                insertt(sum, i, j, k);
                int diff = s - sum;
                if (isIn(diff, i, j, k)) {
                    return 0;
                }
            }
        }
    }
    fout << -1;
    return 0;
}