Pagini recente » Cod sursa (job #609240) | Cod sursa (job #2402200) | Cod sursa (job #2200269) | Cod sursa (job #180234) | Cod sursa (job #600336)
Cod sursa(job #600336)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
vector <int> num, Sol;
int s;
int bin (int begin, int end, int x)
{
if (begin <= end)
{ int temp = (begin + end)/2 ;
if (x > num[temp])
return bin (temp + 1, end, x);
if (x < num[temp])
return bin (begin, temp - 1, x);
if (x == num[temp])
return temp;
}
if (end > 0)
return end;
else
return -1;
}
int solve (vector <int> sol,int sum, int end,int ix)
{
if (sol[5] != 0 && sum == 0)
{
Sol = sol;
return 1;
}
if (ix <= 5)
{
int x = bin (0, end, sum), i;
for (i = x; i >= 0; i--)
if (sum - num[i] >= 0)
{
sol[ix] = num[i];
if (solve (sol, sum - num[i], x, ix + 1))
return 1;
}
}
return 0;
}
int main() {
ifstream in ("loto.in");
ofstream out ("loto.out");
int n, x, i;
in >> n >> s;
vector <int> sol(6, 0);
for (; n > 0; n--)
{
in >> x;
num.push_back(x);
}
sort (num.begin(), num.begin() + num.size() - 1);
solve (sol, s, num.size() - 1, 0);
if (Sol.size() == 6)
for (i = 5; i >= 0; i--)
out << Sol[i] << " ";
else
out << -1;
return 0;
}