Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
32 changes: 32 additions & 0 deletions task_1196.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#include <iostream>
#include <algorithm>
#include <unordered_set>

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<int> 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;
}
25 changes: 25 additions & 0 deletions task_1496.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#include <iostream>
#include <map>
#include <string>

const int MIN_SUBMISSIONS_TO_BE_SPAMMER = 2;

int main() {
size_t num_submissions;
std::cin >> num_submissions;

std::map<std::string, int> 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;
}
27 changes: 27 additions & 0 deletions task_1545.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#include <iostream>
#include <map>
#include <set>

int main() {
size_t num_hieroglyphs;
std::cin >> num_hieroglyphs;
std::cin.ignore(1, '\n'); // go to next line to read chars

std::map<char, std::set<char>> 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;
}
81 changes: 81 additions & 0 deletions task_1837.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
#include <iostream>
#include <map>
#include <set>
#include <string>
#include <algorithm>
#include <queue>
#include <array>

static const std::string MAIN_MEMBER = "Isenbaev";

using TeamType = std::array<std::string, 3>;
using IsenbaevsNumbersType = std::map<std::string, int>;

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<typename Key>
std::map<Key, int> compute_distance(const std::map<Key, std::set<Key>>& graph, const Key& root) {
// Breadth-first search
std::map<Key, int> distances;
std::queue<Key> 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<std::string, std::set<std::string>> 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;
}