#include #include #include #include template class Stack { private: size_t _len; std::vector _data; public: explicit Stack(size_t alloc_size = 128); size_t push(T elem); T pop(); size_t len(); T front(); }; template size_t Stack::push(T elem) { if (this->_data.size() > this->_len) { this->_data[this->_len] = elem; this->_len++; return this->_len; } this->_data.push_back(elem); this->_len = this->_data.size(); return this->_len; }; template Stack::Stack(size_t alloc_size) : _len(0), _data(alloc_size) {}; template T Stack::pop() { if (this->_len == 0) { std::abort(); } this->_len--; return this->_data[this->_len]; } template size_t Stack::len() { return this->_len; } template T Stack::front() { if (this->_len == 0) { std::abort(); } return this->_data[this->_len - 1]; }; size_t digits_sum(int number) { size_t result = 0; while(number != 0) { result += number%10; number /= 10; } return result; } typedef std::pair two_biggest_t; typedef std::array index_t; int solution(std::vector A) { index_t index; for (int number : A) { size_t sum = digits_sum(number); auto &two_biggest = index[sum]; if (number > two_biggest.first) { if (number > two_biggest.second) { two_biggest.first = two_biggest.second; two_biggest.second = number; } else { two_biggest.first = number; } } } int biggest_sum = -1; for (auto &sum : index) { if (sum.first == 0) { continue; } int local_sum = sum.first + sum.second; if (local_sum > biggest_sum) { biggest_sum = local_sum; } } return biggest_sum; } int main() { // std::cout << digits_sum(100) << std::endl; std::cout << solution({51, 32, 43}) << std::endl; return 0; }