#include <array>
#include <iostream>
#include <map>
using namespace std;
class SumSquares {
private:
static const size_t length = 3;
public:
using key_t = unsigned;
using value_t = size_t;
using map_t = map<key_t, value_t>;
using box_t = array<map_t, length>;
using item_t = pair<key_t, value_t>;
using result_t = pair<bool, array<item_t, length>>;
using values_t = array<value_t, length>;
private:
key_t target = 0;
box_t box;
map_t fill(istream& inp, const value_t count) {
map_t item;
key_t key;
for (value_t value = 0; value < count; ++value) {
inp >> key;
if (!item.contains(key) && key * key < target) {
item.insert({ key, value + 1 });
}
}
return item;
}
static bool is_not_exists(key_t key) {
while (key % 4 == 0) key /= 4;
return key % 8 == 7;
}
bool is_exists(const key_t a, const key_t b, const key_t c) const {
return target == a * a + b * b + c * c;
}
result_t result() const {
result_t res{};
for (const auto& a : box[0]) {
res.second[0] = a;
for (const auto& b : box[1]) {
res.second[1] = b;
for (const auto& c : box[2]) {
res.second[2] = c;
if (is_exists(a.first, b.first, c.first)) {
res.first = true;
return res;
}
}
}
}
return res;
}
friend istream& operator>>(istream& inp, SumSquares& ss) {
values_t values{};
for (auto& value : values) inp >> value;
inp >> ss.target;
size_t i = 0;
for (auto& item : ss.box) {
item = ss.fill(inp, values[i]);
++i;
}
return inp;
}
friend ostream& operator<<(ostream& out, const SumSquares& ss) {
if (SumSquares::is_not_exists(ss.target)) return out << "-1";
const auto& [status, result] = ss.result();
if (!status) return out << "-1";
for (const auto& [key, value] : result) out << value << ' ';
return out;
}
};
int main() {
SumSquares sum_squares;
cin >> sum_squares;
cout << sum_squares << '\n';
}
что для заданного числа К выполняется равенство а^2 + b^2 + c^2 = k?
В первой строке записаны четыре натуральных числа n, m, t и к - размеры каждого из трех наборов и число k
Выведите три числа: номера чисел из каждого набора согласно заданному во входных данных порядку, которые
подходят под указанное равенство. Нумерация чисел в наборах начинается с единицы. Если правильных ответов
несколько, то выведите любой из них.
Вход
3 4 4 3
2 1 3
1 2 2 1
2 3 1 2
Вывод
2 1 3