Pagini recente » Cod sursa (job #1291626) | Cod sursa (job #777951) | Cod sursa (job #1334590) | Cod sursa (job #2376048) | Cod sursa (job #1222170)
#include <stdio.h>
#define NMAX 101
#define llong long long
using namespace std;
struct three {
three(int zero, int one, int two) {
this->zero = zero;
this->one = one;
this->two = two;
}
three() {
this->zero = 0;
this->one = 0;
this->two = 0;
}
llong get_sum() {
llong sum = 0;
sum += zero + one + two;
return sum;
}
int zero, one, two;
} null_three(-1, -1, -1);
class LinkedHashEntry {
private:
llong key;
three value;
LinkedHashEntry *next;
public:
LinkedHashEntry(llong key, three value) {
this->key = key;
this->value = value;
this->next = NULL;
}
llong getKey() {
return key;
}
three getValue() {
return value;
}
void setValue(three value) {
this->value = value;
}
LinkedHashEntry *getNext() {
return next;
}
void setNext(LinkedHashEntry *next) {
this->next = next;
}
};
const int TABLE_SIZE = 14741;
class HashMap {
private:
LinkedHashEntry **table;
public:
HashMap() {
table = new LinkedHashEntry*[TABLE_SIZE];
for (int i = 0; i < TABLE_SIZE; i++)
table[i] = NULL;
}
three get(llong key) {
int hash = (key % TABLE_SIZE);
if (table[hash] == NULL)
return null_three;
else {
LinkedHashEntry *entry = table[hash];
while (entry != NULL && entry->getKey() != key)
entry = entry->getNext();
if (entry == NULL)
return null_three;
else
return entry->getValue();
}
}
void put(llong key, three value) {
int hash = (key % TABLE_SIZE);
if (table[hash] == NULL)
table[hash] = new LinkedHashEntry(key, value);
else {
LinkedHashEntry *entry = table[hash];
while (entry->getNext() != NULL)
entry = entry->getNext();
if (entry->getKey() == key)
entry->setValue(value);
else
entry->setNext(new LinkedHashEntry(key, value));
}
}
void remove(llong key) {
int hash = (key % TABLE_SIZE);
if (table[hash] != NULL) {
LinkedHashEntry *prevEntry = NULL;
LinkedHashEntry *entry = table[hash];
while (entry->getNext() != NULL && entry->getKey() != key) {
prevEntry = entry;
entry = entry->getNext();
}
if (entry->getKey() == key) {
if (prevEntry == NULL) {
LinkedHashEntry *nextEntry = entry->getNext();
delete entry;
table[hash] = nextEntry;
} else {
LinkedHashEntry *next = entry->getNext();
delete entry;
prevEntry->setNext(next);
}
}
}
}
~HashMap() {
for (int i = 0; i < TABLE_SIZE; i++)
if (table[i] != NULL) {
LinkedHashEntry *prevEntry = NULL;
LinkedHashEntry *entry = table[i];
while (entry != NULL) {
prevEntry = entry;
entry = entry->getNext();
delete prevEntry;
}
}
delete[] table;
}
};
int numbers[NMAX];
HashMap threes;
int main() {
freopen("loto.in", "rt", stdin);
freopen("loto.out", "wt", stdout);
llong n, s;
scanf("%lld %lld\n", &n, &s);
for (int i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
three element(numbers[i], numbers[j], numbers[k]);
threes.put(element.get_sum(), element);
three other = threes.get(s - element.get_sum());
if (other.get_sum() != -3) {
printf("%d %d %d %d %d %d\n", other.zero, other.one, other.two, element.zero, element.one, element.two);
return 0;
}
}
}
}
printf("%d\n", -1);
return 0;
}