diff --git a/CMakeLists.txt b/CMakeLists.txt index 7543c5a..5577c6c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,4 +37,10 @@ set(CMAKE_CXX_STANDARD 17) #add_executable(timus_cpp task_1585.cpp) #add_executable(timus_cpp task_1263.cpp) #add_executable(timus_cpp task_1991.cpp) -add_executable(timus_cpp task_1100.cpp) +#add_executable(timus_cpp task_1100.cpp) + +# homework 08 +#add_executable(timus_cpp task_1545.cpp) +#add_executable(timus_cpp task_1496.cpp) +add_executable(timus_cpp task_1196.cpp) +#add_executable(timus_cpp task_1837.cpp) diff --git a/task_1196.cpp b/task_1196.cpp new file mode 100644 index 0000000..e3c3856 --- /dev/null +++ b/task_1196.cpp @@ -0,0 +1,32 @@ +#include +#include +#include + +int main() { + std::ios::sync_with_stdio(false); + // unordered_set: 0.265 with sync_with_stdio(false), TL without + // set: 0.343 with sync_with_stdio(false), TL without + size_t num_professor_dates; + std::cin >> num_professor_dates; + + std::unordered_set professor_dates; + professor_dates.reserve(num_professor_dates); + int current_date; + for (size_t i = 0; i < num_professor_dates; i++) { + std::cin >> current_date; + professor_dates.insert(current_date); + } + + size_t num_student_dates; + size_t num_dates_in_all_lists = 0; + std::cin >> num_student_dates; + for (size_t i = 0; i < num_student_dates; i++) { + std::cin >> current_date; + if (professor_dates.count(current_date) > 0) { + num_dates_in_all_lists++; + } + } + std::cout << num_dates_in_all_lists; + + return 0; +} diff --git a/task_1496.cpp b/task_1496.cpp new file mode 100644 index 0000000..abef419 --- /dev/null +++ b/task_1496.cpp @@ -0,0 +1,25 @@ +#include +#include +#include + +const int MIN_SUBMISSIONS_TO_BE_SPAMMER = 2; + +int main() { + size_t num_submissions; + std::cin >> num_submissions; + + std::map team_submissions_counter; + std::string current_team; + for(size_t i = 0; i < num_submissions; i++) { + std::cin >> current_team; + team_submissions_counter[current_team]++; + } + + for(const auto&[team, team_submissions_count]: team_submissions_counter) { + if (team_submissions_count >= MIN_SUBMISSIONS_TO_BE_SPAMMER) { + std::cout << team << std::endl; + } + } + + return 0; +} diff --git a/task_1545.cpp b/task_1545.cpp new file mode 100644 index 0000000..c1e3dce --- /dev/null +++ b/task_1545.cpp @@ -0,0 +1,27 @@ +#include +#include +#include + +int main() { + size_t num_hieroglyphs; + std::cin >> num_hieroglyphs; + std::cin.ignore(1, '\n'); // go to next line to read chars + + std::map> suggestions; + char current_letter1, current_letter2; + for(size_t i = 0; i < num_hieroglyphs; i++) { + std::cin >> current_letter1 >> current_letter2; + std::cin.ignore(1, '\n'); // go to next line + suggestions[current_letter1].insert(current_letter2); + } + + char given_letter; + std::cin >> given_letter; + if(suggestions.count(given_letter) > 0) { + for (const auto& suggested_letter:suggestions.at(given_letter)) { + std::cout << given_letter << suggested_letter << std::endl; + } + } // else print nothing + + return 0; +} diff --git a/task_1837.cpp b/task_1837.cpp new file mode 100644 index 0000000..7a7f697 --- /dev/null +++ b/task_1837.cpp @@ -0,0 +1,81 @@ +#include +#include +#include +#include +#include +#include +#include + +static const std::string MAIN_MEMBER = "Isenbaev"; + +using TeamType = std::array; +using IsenbaevsNumbersType = std::map; + +std::istream& operator>>(std::istream& stream, TeamType& team) { + stream >> team[0] >> team[1] >> team[2]; + return stream; +} + +std::ostream& operator<<(std::ostream& stream, const IsenbaevsNumbersType& isenbaevs_numbers) { + for (const auto&[member, number]: isenbaevs_numbers) { + stream << member << " "; + if (number < 0) { + stream << "undefined"; + } else { + stream << number; + } + stream << std::endl; + } + return stream; +} + +template +std::map compute_distance(const std::map>& graph, const Key& root) { + // Breadth-first search + std::map distances; + std::queue elements_to_update_neighbours; + for (const auto&[element, _]: graph) { + distances[element] = -1; + } + if (graph.count(root) > 0) { // if Isenbaev was in teams + distances[MAIN_MEMBER] = 0; + elements_to_update_neighbours.push(MAIN_MEMBER); + } + while (!elements_to_update_neighbours.empty()) { + std::string current_element = elements_to_update_neighbours.front(); + elements_to_update_neighbours.pop(); + if (graph.count(current_element) > 0) { + for (const auto& teammate: graph.at(current_element)) { + if (distances[teammate] < 0) { + distances[teammate] = distances[current_element] + 1; + elements_to_update_neighbours.push(teammate); + } + } + } + } + return distances; +} + +int main() { + size_t num_teams; + std::cin >> num_teams; + std::string name1, name2, name3; + + std::map> teammates; + TeamType team; + for (size_t i = 0; i < num_teams; i++) { + std::cin >> team; + for (const auto& member: team) { + for (const auto& member2: team) { + if (member != member2) { + teammates[member].insert(member2); + } + } + } + } + + IsenbaevsNumbersType isenbaevs_numbers = compute_distance(teammates, MAIN_MEMBER); + std::cout << isenbaevs_numbers; + + return 0; +}