Pagini recente » Cod sursa (job #150201) | Cod sursa (job #442551) | Cod sursa (job #2337825) | Cod sursa (job #281136) | Cod sursa (job #2354823)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
const int NMAX = 103;
struct SumeDe3 {
int suma;
int a;
int b;
int c;
};
int NumereLoto[NMAX];
std::vector<SumeDe3> SumeDeTrei;
bool CompareSort(SumeDe3 A, SumeDe3 B) {
return A.suma < B.suma;
}
int CautareBinara(int suma, int stanga, int dreapta) {
if (stanga > dreapta) {
return -1;
}
int mijloc = (stanga + dreapta) / 2;
if (suma == SumeDeTrei[mijloc].suma) {
return mijloc;
}
if (suma < SumeDeTrei[mijloc].suma) {
return CautareBinara(suma, stanga, mijloc - 1);
}
else {
return CautareBinara(suma, mijloc + 1, dreapta);
}
}
int main() {
std::ifstream in("loto.in");
std::ofstream out("loto.out");
int N, S;
in >> N >> S;
for (int i = 1; i <= N; ++i) {
in >> NumereLoto[i];
}
//{NumereLoto[i] + NumereLoto[j] + NumereLoto[k], NumereLoto[i], NumereLoto[j], NumereLoto[k]}
for (int i = 1; i <= N; ++i) {
for (int j = 1; j <= N; ++j) {
for (int k = 1; k <= N; ++k) {
int suma = NumereLoto[i] + NumereLoto[j] + NumereLoto[k];
SumeDeTrei.push_back({ suma, NumereLoto[i], NumereLoto[j], NumereLoto[k] });
}
}
}
std::sort(SumeDeTrei.begin(), SumeDeTrei.end(), CompareSort);
int prev = -1;
for (int i = 0; i < SumeDeTrei.size(); ++i) {
int found = CautareBinara(S - SumeDeTrei[i].suma, 0, SumeDeTrei.size() - 1);
if (prev != SumeDeTrei[i].suma && found > -1) {
out << SumeDeTrei[i].a << ' ' << SumeDeTrei[i].b << ' ' << SumeDeTrei[i].c << ' ' << SumeDeTrei[found].a << ' ' << SumeDeTrei[found].b << ' ' << SumeDeTrei[found].c;
prev = SumeDeTrei[i].suma;
return 0;
}
}
out << -1;
system("PAUSE");
return 0;
}