С++ «Неделя вторая - Контейнер map - Анаграммы» #12
Запись от acmades размещена 19.07.2017 в 13:29
Показов 22864
Комментарии 3
Метки c++, map, анаграмма, блог, начинающие, новички, основы программирования, с++
|
Контейнер map, проверяем анаграммы. Курс: «Основы разработки на C++: белый пояс» Задание: Слова называются анаграммами друг друга, если одно из них можно получить перестановкой букв в другом. Например, слово «eat» можно получить перестановкой букв слова «tea», поэтому эти слова являются анаграммами друг друга. Даны пары слов, проверьте для каждой из них, являются ли слова этой пары анаграммами друг друга. Указание Один из способов проверки того, являются ли слова анаграммами друг друга, заключается в следующем. Для каждого слова с помощью словаря подсчитаем, сколько раз в нём встречается каждая буква. Если для обоих слов эти словари равны (а это проверяется с помощью обычного оператора ==), то слова являются анаграммами друг друга, в противном случае не являются. При этом построение такого словаря по слову удобно вынести в отдельную функцию BuildCharCounters. Формат ввода Сначала дано число пар слов N, затем в N строках содержатся пары слов, которые необходимо проверить. Гарантируется, что все слова состоят лишь из строчных латинских букв. Формат вывода Выведите N строк: для каждой введённой пары слов YES, если эти слова являются анаграммами, и NO в противном случае. Пример Ввод 3 eat tea find search master stream Вывод YES NO YES Моё решение:
Реализуйте справочник столиц стран. На вход программе поступают следующие запросы: CHANGE_CAPITAL country new_capital — изменение столицы страны country на new_capital, либо добавление такой страны с такой столицей, если раньше её не было. RENAME old_country_name new_country_name — переименование страны из old_country_name в new_country_name. ABOUT country — вывод столицы страны country. DUMP — вывод столиц всех стран. Формат ввода В первой строке содержится количество запросов Q, в следующих Q строках — описания запросов. Все названия стран и столиц состоят лишь из латинских букв, цифр и символов подчёркивания. Формат вывода Выведите результат обработки каждого запроса: В ответ на запрос CHANGE_CAPITAL country new_capital выведите Introduce new country country with capital new_capital, если страны country раньше не существовало; Country country hasn't changed its capital, если страна country до текущего момента имела столицу new_capital; Country country has changed its capital from old_capital to new_capital, если страна country до текущего момента имела столицу old_capital, название которой не совпадает с названием new_capital. В ответ на запрос RENAME old_country_name new_country_name выведите Incorrect rename, skip, если новое название страны совпадает со старым, страна old_country_name не существует или страна new_country_name уже существует; Country old_country_name with capital capital has been renamed to new_country_name, если запрос корректен и страна имеет столицу capital. В ответ на запрос ABOUT country выведите Country country doesn't exist, если страны с названием country не существует; Country country has capital capital, если страна country существует и имеет столицу capital. В ответ на запрос DUMP выведите There are no countries in the world, если пока не было добавлено ни одной страны; разделённые пробелами пары country/capital, описывающие столицы всех стран и упорядоченные по названию страны, если в мире уже есть хотя бы одна страна. Пример 1 Ввод 6 CHANGE_CAPITAL RussianEmpire Petrograd RENAME RussianEmpire RussianRepublic ABOUT RussianRepublic RENAME RussianRepublic USSR CHANGE_CAPITAL USSR Moscow DUMP Вывод Introduce new country RussianEmpire with capital Petrograd Country RussianEmpire with capital Petrograd has been renamed to RussianRepublic Country RussianRepublic has capital Petrograd Country RussianRepublic with capital Petrograd has been renamed to USSR Country USSR has changed its capital from Petrograd to Moscow USSR/Moscow Моё решение:
| ||||||||||
Метки c++, map, анаграмма, блог, начинающие, новички, основы программирования, с++
Размещено в Основы разработки на C++: белый пояс
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 3
Комментарии
-
Запись от ZarinZomanu4 размещена 24.07.2017 в 00:15
-
да потому, что если где-то нечаянно обратиться ccCopy[b] , а b ещё не существует, то в map создастся новый элемент. И чтобы не заморачиваться, создал дубликат и перелистываю его как угодно, не заморачиваясь что в нем что-то не то создастся. А результат, конечно, в сс нужно записывать.
Сообщение от ZarinZomanu4
Это конечно не правильно, и считаю что нужно и можно улучшить.Запись от acmades размещена 24.07.2017 в 08:47
-
C++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
#include <iostream> #include <map> #include <string> #include <vector> using namespace std; int main(){ int n = 0; cin >> n ; vector<string> out; for (int i=0;i<n;i++){ string s2="",s1=""; cin >> s1; cin >> s2; map<char,unsigned> m1, m2; for (unsigned j=0;j<s1.size();j++){ ++m1[s1[j]]; } for (unsigned j=0;j<s2.size();j++){ ++m2[s2[j]]; } if ( m1 == m2 ){ out.push_back("YES"); } else{ out.push_back("NO"); } } vector<string>::iterator it; for (it=out.begin();it!=out.end();it++) cout << *it << endl; return 0; }
Запись от flash_back размещена 10.10.2017 в 11:52


