Pagini recente » Cod sursa (job #74084) | Cod sursa (job #1891333) | Cod sursa (job #292698) | Cod sursa (job #1935049) | Cod sursa (job #2380939)
#include <algorithm>
#include <fstream>
#include <vector>
using namespace std;
#define FILE_NAME "loto"
ifstream in (FILE_NAME".in");
ofstream out(FILE_NAME".out");
constexpr int MAX_NUMS = 100 + 4;
constexpr int MAX_TICKETS = MAX_NUMS * MAX_NUMS * MAX_NUMS;
struct ticket
{
int sum;
int x, y, z;
ticket(int _x = 0, int _y = 0, int _z = 0)
{
x = _x, y = _y, z = _z;
sum = x + y + z;
}
};
vector < ticket > halfTicket;
int Nums[MAX_NUMS];
int N, S;
bool operator<(ticket &a, ticket &b)
{
return a.sum < b.sum;
}
int main()
{
in >> N >> S;
for(int i = 0; i < N; ++i)
in >> Nums[i];
for(int i = 0; i < N; ++i)
for(int j = i; j < N; ++j)
for(int k = j; k < N; ++k)
halfTicket.push_back(ticket(Nums[i], Nums[j], Nums[k]));
sort(halfTicket.begin(), halfTicket.end());
int K = halfTicket.size();
for(int i = 0; i < K; ++i)
{
ticket luckyTicket = halfTicket[i];
int need = S - luckyTicket.sum;
int st = i, dr = K-1;
while(st <= dr)
{
int m = st + ((dr-st)>>1);
if(halfTicket[m].sum == need)
{
out << luckyTicket.x << ' ' << luckyTicket.y << ' ' << luckyTicket.z << ' '
<< halfTicket[m].x << ' ' << halfTicket[m].y << ' ' << halfTicket[m].z << '\n';
return 0;
}
else if(halfTicket[m].sum < need)
st = m + 1;
else
dr = m - 1;
}
}
out << "-1\n";
return 0;
}