Pagini recente » Cod sursa (job #418372) | Cod sursa (job #413208) | Cod sursa (job #2526310) | Cod sursa (job #700284) | Cod sursa (job #2931602)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("loto.in");
ofstream out("loto.out");
int sum[1000005], n, s, nr[105];
int cnt = 1;
int caut_bin(int suma)
{
int st = 1, dr = (n * n) * n;
while (st <= dr)
{
int mij = (st + dr) / 2;
if (s - sum[mij] == suma)
{
return sum[mij];
}
else
{
if (s - sum[mij] < suma)
{
st = mij + 1;
}
else
{
dr = mij - 1;
}
}
}
return 0;
}
void solutie(int sum1)
{
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
for (int k = 1; k <= n; k++)
{
if (nr[i] + nr[j] + nr[k] == sum1)
{
out << nr[i] << " " << nr[j] << " " << nr[k];
return;
}
}
}
}
}
int main()
{
in >> n >> s;
for (int i = 1; i <= n; i++)
{
in >> nr[i];
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
for (int k = 1; k <= n; k++)
{
sum[cnt] = nr[i] + nr[j] + nr[k];
cnt++;
}
}
}
sort(sum + 1, sum + cnt + 1);
int sol1, sol2 = 0;
for (int i = 1; i <= (n * n) * n; i++)
{
if (caut_bin(sum[i]) != 0)
{
sol1 = sum[i];
sol2 = caut_bin(sum[i]);
}
}
if (sol2 != 0)
{
solutie(sol1);
out << " ";
solutie(sol2);
}
else
{
out << -1;
}
return 0;
}