Pagini recente » Cod sursa (job #1354457) | Cod sursa (job #951477) | Cod sursa (job #28452) | Cod sursa (job #347411) | Cod sursa (job #3132013)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
void genereaza(const vector<int>& num, vector<int>& num_selectate, int suma_finala, int suma_curenta, size_t start, vector<int>& result) {
if (num_selectate.size() == 6) {
if (suma_curenta == suma_finala) {
result = num_selectate;
}
return;
}
int remaining_sum = suma_finala - suma_curenta;
for (size_t i = start; i < num.size(); i++) {
int new_sum = suma_curenta + num[i];
if (new_sum <= suma_finala && new_sum + remaining_sum >= suma_finala) {
num_selectate.push_back(num[i]);
genereaza(num, num_selectate, suma_finala, new_sum, i, result);
num_selectate.pop_back();
}
}
}
vector<int> gaseste_finale(int N, int S, const vector<int>& num_loterie) {
vector<int> sortate = num_loterie;
sort(sortate.begin(), sortate.end());
vector<int> result;
vector<int> selectate;
genereaza(sortate, selectate, S, 0, 0, result);
return result.empty() ? vector<int>{-1} : result;
}
int main() {
int N, S;
vector<int> num_loterie;
// CITIREA
ifstream input("loto.in");
input >> N >> S;
for (int i = 0; i < N; i++) {
int num;
input >> num;
num_loterie.push_back(num);
}
input.close();
// CALCULARE NUMERE CASTIGATOARE
vector<int> castigator = gaseste_finale(N, S, num_loterie);
// AFISARE
ofstream output("loto.out");
if (castigator[0] == -1) {
output << "-1" << endl;
} else {
for (size_t i = 0; i < castigator.size(); i++) {
output << castigator[i] << " ";
}
output << endl;
}
output.close();
return 0;
}