Cod sursa(job #3130165)

Utilizator z.catincaCatinca Zavoianu z.catinca Data 16 mai 2023 23:11:10
Problema Loto Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.63 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

bool generateTicket(int N, int S, const vector<int>& numbers, int currentSum, vector<int>& chosenNumbers, vector<int>& result) {
    if (chosenNumbers.size() == 6) {
        if (currentSum == S) {
            result = chosenNumbers;
            return true;
        } else {
            return false;
        }
    }


    for (int i = 0; i < N; i++) {
        chosenNumbers.push_back(numbers[i]);
        if (generateTicket(N, S, numbers, currentSum + numbers[i], chosenNumbers, result)) {
            return true;
        }
        chosenNumbers.pop_back();
    }

    return false;
}

vector<int> findWinningTicket(int N, int S, const vector<int>& numbers) {
    vector<int> chosenNumbers;
    vector<int> result;
    generateTicket(N, S, numbers, 0, chosenNumbers, result);
    return result;
}

int main() {
    ifstream inputFile("loto.in");
    if (!inputFile.is_open()) {
        cout << "Error opening input file." << endl;
        return 1;
    }

    ofstream outputFile("loto.out");
    if (!outputFile.is_open()) {
        cout << "Error opening output file." << endl;
        inputFile.close();
        return 1;
    }

    int N, S;
    inputFile >> N >> S;

    vector<int> numbers(N);
    for (int i = 0; i < N; i++) {
        inputFile >> numbers[i];
    }

    vector<int> winningTicket = findWinningTicket(N, S, numbers);

    if (!winningTicket.empty()) {
        for (int i = 0; i < 6; i++) {
            outputFile << winningTicket[i] << " ";
        }
    } else {
        outputFile << "-1";
    }


    inputFile.close();
    outputFile.close();

    return 0;
}