Cod sursa(job #1310655)

Utilizator tudoras8tudoras8 tudoras8 Data 7 ianuarie 2015 01:03:31
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <fstream>
#include <vector>
#include <unordered_map>

using namespace std;

int main()
{
    int N, S, i, j, k;

    ifstream f("loto.in");
    f >> N >> S;
    int a[N + 1], min = ~0;
    for (i = 1; i <= N; i++) {
        f >> a[i];
        if (min > a[i])
            min = a[i];
    }
    f.close();

    bool found = false;

    ofstream g("loto.out");

    if (S < 6 * min) {
        g << -1;
    } else {
        int sum;
        vector<int> numbers;
        for (int i = 0; i < 3; i++) {
            numbers.push_back(0);
        }

        unordered_map <int, vector<int>> map;
        for (i = 1; i <= N; i++)
            for (j = i; j <= N; j++)
                for (k = j; k <= N; k++) {
                    sum = a[i] + a[j] + a[k];
                    numbers[0] = a[i];
                    numbers[1] = a[j];
                    numbers[2] = a[k];
                    map[sum] = numbers;
                }

        int target;
        unordered_map<int, vector<int>>::iterator pairIt;
        for (pairIt = map.begin(); pairIt != map.end() && !found; pairIt++) {
            target = S - pairIt->first;
            if (map.find(target) != map.end()) {
                g << map[pairIt->first][0] << " " << map[pairIt->first][1] << " " << map[pairIt->first][2] << " ";
                g << map[S - pairIt->first][0] << " " << map[S - pairIt->first][1] << " " << map[S - pairIt->first][2] << " ";
                found = true;
            }
        }
        if (!found)
            g << -1;
    }
    g.close();
    return 0;
}