From 31d1a5f464631d5ab2c87accb84015b9d043b7f1 Mon Sep 17 00:00:00 2001 From: Nikita Tokarchuk Date: Thu, 10 Feb 2022 15:00:02 +0100 Subject: [PATCH] Solution --- CMakeLists.txt | 6 +++ main.cpp | 124 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 130 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 main.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..c06551b --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 3.21) +project(max_sum_squal_digits) + +set(CMAKE_CXX_STANDARD 14) + +add_executable(max_sum_squal_digits main.cpp) diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..774f03d --- /dev/null +++ b/main.cpp @@ -0,0 +1,124 @@ +#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; +}