Pagini recente » Cod sursa (job #2800257) | Cod sursa (job #2295906) | Cod sursa (job #1038027) | Cod sursa (job #2586284) | Cod sursa (job #3130454)
#include <fstream>
#include <algorithm>
#include <vector>
typedef long long nat;
struct triple {
nat v1, v2, v3, sum;
triple(nat _sum)
:
v1(-1),
v2(-1),
v3(-1),
sum(_sum)
{}
triple(nat _v1, nat _v2, nat _v3)
:
v1(_v1),
v2(_v2),
v3(_v3),
sum(_v1 + _v2 + _v3)
{}
};
int main() {
std::ifstream fin("loto.in");
std::ofstream fout("loto.out");
int n;
nat v[100], s;
fin >> n >> s;
int cn = n;
while (cn--) {
fin >> v[n - cn - 1];
}
std::sort(v, v + n);
std::vector<triple> t;
for (int i = 0; i < n; ++i)
for (int j = i; j < n; ++j)
for (int k = j; k < n; ++k)
t.push_back(triple(v[i], v[j], v[k]));
std::sort(t.begin(), t.end(), [](const triple& a, const triple& b) {
return a.sum < b.sum;
});
for (int i = 0; i < n; ++i)
for (int j = i; j < n; ++j)
for (int k = j; k < n; ++k) {
nat sumToSearch = s - v[i] - v[j] - v[k];
auto dr = std::lower_bound(t.begin(), t.end(), triple(sumToSearch), [](const triple& a, const triple& b) {
return a.sum < b.sum;
});
if (dr != t.end() and dr->sum == sumToSearch) {
nat rasp[6] = { v[i], v[j], v[k], dr->v1, dr->v2, dr->v3 };
std::sort(rasp, rasp + 6);
for (int c = 0; c < 6; ++c)
fout << rasp[c] << " ";
return 0;
}
}
fout << -1;
return 0;
}