diff --git a/src/main-utd-bob-spring-q1.cpp b/src/main-utd-bob-spring-q1.cpp new file mode 100644 index 0000000..ff31ff7 --- /dev/null +++ b/src/main-utd-bob-spring-q1.cpp @@ -0,0 +1,43 @@ + +#include +#include +#include +#include +#include +#include +#include +std::vector read_input() { + std::ios::sync_with_stdio(false); + std::cin.tie(nullptr); + + std::string line = std::string{}; + std::getline(std::cin, line); + + std::istringstream iss = std::istringstream{line}; + + return std::vector{std::istream_iterator{iss}, + std::istream_iterator{}}; +} + +int main(int argc, char *argv[]) { + std::vector input = read_input(); + + input.erase(std::remove_if(input.begin(), input.end(), + [](uint32_t x) { return x == 0; }), + input.end()); + switch (input.size()) { + case 0: + std::printf("%.2f", (float)24); + break; + case 2: + std::printf("%.2f", input.at(0) + input.at(1) + + (416 - input.at(0) - input.at(1)) / 50); + break; + case 1: + std::printf("%.2f", input.at(0) + 2 * ((416 - input.at(0)) / (51))); + break; + case 3: + std::printf("%.2f", input.at(0) + input.at(1) + input.at(2)); + break; + } +} diff --git a/src/main-utd-bob-spring-q2.cpp b/src/main-utd-bob-spring-q2.cpp new file mode 100644 index 0000000..5a89fc7 --- /dev/null +++ b/src/main-utd-bob-spring-q2.cpp @@ -0,0 +1,49 @@ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +std::vector read_input() { + std::ios::sync_with_stdio(false); + std::cin.tie(nullptr); + + std::string line = std::string{}; + std::getline(std::cin, line); + std::getline(std::cin, line); + std::istringstream iss = std::istringstream{line}; + + return std::vector{std::istream_iterator{iss}, + std::istream_iterator{}}; +} +int main(int argc, char *argv[]) { + std::vector input = read_input(); + if (input.size() < 2) { + std::printf("0"); + return 0; + } + + for (int i = 0; i < static_cast(input.size()); i++) { + input[i] = input[i] - i; + } + + int current_max = std::numeric_limits::min(); + for (size_t i = 1; i < input.size(); i++) { + auto iter_delim = input.cbegin() + i; + int max_end_stub = *std::max_element(iter_delim, input.cend()); + int min_start_stub = *std::min_element(input.cbegin(), iter_delim); + int difference = max_end_stub - min_start_stub; + current_max = std::max(difference, current_max); + } + + std::printf("%d", current_max); + + return 0; +} diff --git a/src/main-utd-bob-spring-tmie.cpp b/src/main-utd-bob-spring-tmie.cpp new file mode 100644 index 0000000..ed05f79 --- /dev/null +++ b/src/main-utd-bob-spring-tmie.cpp @@ -0,0 +1,82 @@ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct TmieInput { + uint32_t rows; + uint32_t columns; + std::shared_ptr>> graph; +}; + +TmieInput pull_input() { + uint32_t rows; + uint32_t columns; + std::cin >> rows; + std::cin >> columns; + + std::shared_ptr>> graph = + std::make_shared>>( + rows, std::vector(columns)); + for (uint32_t i = 0; i < rows; i++) { + for (uint32_t j = 0; j < columns; j++) { + (*graph)[i][j] = 0; + std::cin >> (*graph)[i][j]; + } + } + return TmieInput{rows, columns, graph}; +} + +void clear_island_dfs(uint32_t target, uint32_t r, uint32_t c, + std::shared_ptr>> data) { + std::vector> stack = {{r, c}}; + while (!stack.empty()) { + const auto [current_r, current_c] = stack.back(); + stack.pop_back(); + + if (current_r >= data->size() || current_c >= data->at(current_r).size()) + continue; + if (data->at(current_r)[current_c] != target) + continue; + + data->at(current_r)[current_c] = 0; + if (current_r > 0) + stack.push_back({current_r - 1, current_c}); + if (current_c > 0) + stack.push_back({current_r, current_c - 1}); + stack.push_back({current_r + 1, current_c}); + stack.push_back({current_r, current_c + 1}); + } +} +int main(int argc, char *argv[]) { + std::ios::sync_with_stdio(false); + std::cin.tie(nullptr); + TmieInput input = pull_input(); + std::map terrain_counts = {}; + for (uint32_t i = 0; i < input.rows; i++) { + for (uint32_t j = 0; j < input.columns; j++) { + const uint32_t terrain_type = input.graph->at(i)[j]; + if (terrain_type == 0) + continue; + + clear_island_dfs(terrain_type, i, j, input.graph); + terrain_counts[terrain_type] = terrain_counts[terrain_type] + 1; + } + } + if (terrain_counts.size() == 0) + std::printf("0"); + for (auto iterator = terrain_counts.cbegin(); + iterator != terrain_counts.cend(); iterator++) { + std::printf("%d %d \n", iterator->first, iterator->second); + } + return 0; +}