Pagini recente » Cod sursa (job #2080279) | Cod sursa (job #2851724) | Profil Radu_Georgescu | Cod sursa (job #2386396) | Cod sursa (job #1022870)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
struct sum3 {
int a, b, c;
int sum;
sum3() {
}
sum3(int t1, int t2, int t3) : a(t1), b(t2), c(t3), sum(t1 + t2 + t3) {
}
};
bool CompSum3(const sum3 &s1, const sum3 &s2) {
return s1.sum < s2.sum;
}
int Search(const vector<sum3> &sum, int st, int dr, int val) {
while (st <= dr) {
int mid = (st + dr) / 2;
if (sum[mid].sum == val) {
return mid;
}
if (val < sum[mid].sum) {
dr = mid - 1;
} else {
st = mid + 1;
}
}
return -1;
}
int main() {
int s;
unsigned i, j, k, n;
ifstream in("loto.in");
in >> n >> s;
vector<int> numbers(n);
for (i = 0; i < n; ++i) {
in >> numbers[i];
}
in.close();
vector<sum3> sum;
for (i = 0; i < n; ++i) {
for (j = i; j < n; j++) {
for (k = j; k < n; k++) {
sum.push_back(sum3(numbers[i], numbers[j], numbers[k]));
}
}
}
std::sort(sum.begin(), sum.end(), CompSum3);
int r;
ofstream out("loto.out");
for (i = 0; i < sum.size(); ++i) {
if (sum[i].sum + sum[i].sum == s) {
out << sum[i].a << " " << sum[i].b << " " << sum[i].c << " " <<
sum[i].a << " " << sum[i].b << " " << sum[i].c;
out.close();
return 0;
}
r = Search(sum, i + 1, sum.size() - 1, s - sum[i].sum);
if (r != -1) {
out << sum[i].a << " " << sum[i].b << " " << sum[i].c << " " <<
sum[r].a << " " << sum[r].b << " " << sum[r].c;
out.close();
return 0;
}
}
out << -1;
out.close();
return 0;
}