Pagini recente » Cod sursa (job #2833558) | Cod sursa (job #33809) | Cod sursa (job #1741447) | Cod sursa (job #2354456) | Cod sursa (job #3131858)
#include <iostream>
#include <fstream>
#include <unordered_set>
#include <vector>
using namespace std;
ifstream input("date.in");
ofstream output("date.out");
vector<int> winning_numbers;
bool backtrack(int index, int target, const vector<int>& lottery_numbers, unordered_set<int>& chosen_numbers) {
if (target == 0 && chosen_numbers.size() == 6) {
for (int num : chosen_numbers) {
winning_numbers.push_back(num);
}
return true;
}
if (target < 0 || chosen_numbers.size() == 6 || index >= lottery_numbers.size()) {
return false;
}
// Încercăm să includem numărul curent în combinație
int current_num = lottery_numbers[index];
if (chosen_numbers.find(current_num) == chosen_numbers.end()) {
chosen_numbers.insert(current_num);
if (backtrack(index + 1, target - current_num, lottery_numbers, chosen_numbers)) {
return true;
}
chosen_numbers.erase(current_num);
}
// Trecem la următorul număr din listă
return backtrack(index + 1, target, lottery_numbers, chosen_numbers);
}
void find_winning_numbers(int N, int S, const vector<int>& lottery_numbers)
{
unordered_set<int> chosen_numbers;
backtrack(0, S, lottery_numbers, chosen_numbers);
}
int main() {
int N, S;
input >> N >> S;
vector<int> lottery_numbers(N);
for (int i = 0; i < N; i++)
input >> lottery_numbers[i];
find_winning_numbers(N, S, lottery_numbers);
if (!winning_numbers.empty())
for (int i = 0; i < 6; i++)
output << winning_numbers[i] << " ";
else
output << -1;
return 0;
}