From c3623162477860ae333685a8156b648acea5d990 Mon Sep 17 00:00:00 2001 From: artbataev Date: Sat, 25 Aug 2018 20:57:21 +0300 Subject: [PATCH 1/6] Solved task 1545 --- CMakeLists.txt | 5 ++++- task_1545.cpp | 27 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 task_1545.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 7543c5a..342ecc1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,4 +37,7 @@ 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) 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; +} From 44b6460c16ab29eb4e15f85f9ad1d8faa29a4244 Mon Sep 17 00:00:00 2001 From: artbataev Date: Sat, 25 Aug 2018 21:05:32 +0300 Subject: [PATCH 2/6] Solved task 1496 --- CMakeLists.txt | 2 +- task_1496.cpp | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 task_1496.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 342ecc1..7f9ac8a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,4 +40,4 @@ set(CMAKE_CXX_STANDARD 17) #add_executable(timus_cpp task_1100.cpp) # homework 08 -add_executable(timus_cpp task_1545.cpp) +add_executable(timus_cpp task_1496.cpp) 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; +} From 1aabdd1752fdc9cbeb355c9aea6f28533aa555ce Mon Sep 17 00:00:00 2001 From: artbataev Date: Sat, 25 Aug 2018 21:41:50 +0300 Subject: [PATCH 3/6] Solved task 1196 --- CMakeLists.txt | 4 +++- task_1196.cpp | 30 ++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 task_1196.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 7f9ac8a..ff8253c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,4 +40,6 @@ set(CMAKE_CXX_STANDARD 17) #add_executable(timus_cpp task_1100.cpp) # homework 08 -add_executable(timus_cpp task_1496.cpp) +#add_executable(timus_cpp task_1545.cpp) +#add_executable(timus_cpp task_1496.cpp) +add_executable(timus_cpp task_1196.cpp) diff --git a/task_1196.cpp b/task_1196.cpp new file mode 100644 index 0000000..00ffb67 --- /dev/null +++ b/task_1196.cpp @@ -0,0 +1,30 @@ +#include +#include +#include + +int main() { + 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; + scanf("%d", ¤t_date); // this is 1.5x faster! + if (professor_dates.count(current_date) > 0) { + num_dates_in_all_lists++; + } + } + std::cout << num_dates_in_all_lists; + + return 0; +} From 3d8dfeb3639f40d7620c7206e33fdec35aab314d Mon Sep 17 00:00:00 2001 From: artbataev Date: Sat, 25 Aug 2018 22:24:43 +0300 Subject: [PATCH 4/6] Solved task 1837 --- CMakeLists.txt | 3 +- task_1837.cpp | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 task_1837.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index ff8253c..73d6956 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,4 +42,5 @@ set(CMAKE_CXX_STANDARD 17) # 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_1196.cpp) +add_executable(timus_cpp task_1837.cpp) diff --git a/task_1837.cpp b/task_1837.cpp new file mode 100644 index 0000000..01b9132 --- /dev/null +++ b/task_1837.cpp @@ -0,0 +1,74 @@ +#include +#include +#include +#include +#include +#include +#include + +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; +} + +int main() { + size_t num_teams; + std::cin >> num_teams; + std::string name1, name2, name3; + + std::map> teammates; + IsenbaevsNumbersType isenbaevs_numbers; + TeamType team; + for (size_t i = 0; i < num_teams; i++) { + std::cin >> team; + for (const auto& member: team) { + isenbaevs_numbers[member] = -1; + for (const auto& member2: team) { + if (member != member2) { + teammates[member].insert(member2); + } + } + } + } + + // Breadth-first search + std::queue members_to_update_teammates; + if (isenbaevs_numbers.count(MAIN_MEMBER) > 0) { // if Isenbaev was in teams + isenbaevs_numbers[MAIN_MEMBER] = 0; + members_to_update_teammates.push(MAIN_MEMBER); + } + while(!members_to_update_teammates.empty()) { + std::string current_member = members_to_update_teammates.front(); + members_to_update_teammates.pop(); + if(teammates.count(current_member) > 0) { + for (const auto& teammate: teammates.at(current_member)) { + if (isenbaevs_numbers[teammate] < 0) { + isenbaevs_numbers[teammate] = isenbaevs_numbers[current_member] + 1; + members_to_update_teammates.push(teammate); + } + } + } + } + + std::cout << isenbaevs_numbers; + + return 0; +} From fda450fffc9116d5c30f1f915f0f061e85d6f14f Mon Sep 17 00:00:00 2001 From: artbataev Date: Sat, 25 Aug 2018 22:41:44 +0300 Subject: [PATCH 5/6] Refactored task 1837 - use template function for breadth-first search --- task_1837.cpp | 51 +++++++++++++++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/task_1837.cpp b/task_1837.cpp index 01b9132..7a7f697 100644 --- a/task_1837.cpp +++ b/task_1837.cpp @@ -6,7 +6,7 @@ #include #include -const std::string MAIN_MEMBER = "Isenbaev"; +static const std::string MAIN_MEMBER = "Isenbaev"; using TeamType = std::array; using IsenbaevsNumbersType = std::map; @@ -29,18 +29,43 @@ std::ostream& operator<<(std::ostream& stream, const IsenbaevsNumbersType& isenb 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; - IsenbaevsNumbersType isenbaevs_numbers; TeamType team; for (size_t i = 0; i < num_teams; i++) { std::cin >> team; for (const auto& member: team) { - isenbaevs_numbers[member] = -1; for (const auto& member2: team) { if (member != member2) { teammates[member].insert(member2); @@ -49,25 +74,7 @@ int main() { } } - // Breadth-first search - std::queue members_to_update_teammates; - if (isenbaevs_numbers.count(MAIN_MEMBER) > 0) { // if Isenbaev was in teams - isenbaevs_numbers[MAIN_MEMBER] = 0; - members_to_update_teammates.push(MAIN_MEMBER); - } - while(!members_to_update_teammates.empty()) { - std::string current_member = members_to_update_teammates.front(); - members_to_update_teammates.pop(); - if(teammates.count(current_member) > 0) { - for (const auto& teammate: teammates.at(current_member)) { - if (isenbaevs_numbers[teammate] < 0) { - isenbaevs_numbers[teammate] = isenbaevs_numbers[current_member] + 1; - members_to_update_teammates.push(teammate); - } - } - } - } - + IsenbaevsNumbersType isenbaevs_numbers = compute_distance(teammates, MAIN_MEMBER); std::cout << isenbaevs_numbers; return 0; From 389e07fac5d1b6e883e56f620f716855685a5cae Mon Sep 17 00:00:00 2001 From: artbataev Date: Thu, 20 Sep 2018 11:16:54 +0200 Subject: [PATCH 6/6] Speedup cin (task 1196) --- CMakeLists.txt | 4 ++-- task_1196.cpp | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 73d6956..5577c6c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,5 +42,5 @@ set(CMAKE_CXX_STANDARD 17) # 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) +add_executable(timus_cpp task_1196.cpp) +#add_executable(timus_cpp task_1837.cpp) diff --git a/task_1196.cpp b/task_1196.cpp index 00ffb67..e3c3856 100644 --- a/task_1196.cpp +++ b/task_1196.cpp @@ -3,6 +3,9 @@ #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; @@ -18,8 +21,7 @@ int main() { 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; - scanf("%d", ¤t_date); // this is 1.5x faster! + std::cin >> current_date; if (professor_dates.count(current_date) > 0) { num_dates_in_all_lists++; }