Pagini recente » Istoria paginii runda/tot_2/clasament | Cod sursa (job #2099508) | Cod sursa (job #926326) | Cod sursa (job #1206175) | Cod sursa (job #1657401)
#include <iostream>
#include <cstdio>
#include <map>
#include <algorithm>
#define MAXN 110
#define HASH 1000003
using namespace std;
int a[MAXN], n, s, nq;
struct elem
{
int val, ind;
elem(int val = 0, int ind = 0) : val(val), ind(ind) { }
bool operator()(elem x, elem y) { return x.val < y.val; }
}part[MAXN*MAXN*MAXN];
map<int, int> table;
void citire()
{
scanf("%d %d\n", &n, &s);
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
}
void put(int nr, int ind)
{
table[nr] = ind;
}
int get(int nr)
{
return table[nr];
}
void solvePart()
{
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
for (int k = 1; k <= n; k++) {
put(a[i]+a[j]+a[k], ++nq);
part[nq] = elem(a[i]+a[j]+a[k], nq);
}
}
void print(int ind)
{
ind--;
printf("%d %d %d ", a[ind/(n*n)+1], a[(ind/n)%n+1], a[ind%n+1]);
}
int main()
{
freopen("loto.in", "r", stdin);
freopen("loto.out", "w", stdout);
citire();
solvePart();
//sort(part+1, part+1+nq, elem());
for (int i = 1; i <= nq; i++) {
int must = s - part[i].val;
int ind = get(must);
if (ind) {
print(part[i].ind);
print(ind);
return 0;
}
}
printf("-1");
return 0;
}