Словари

73 задачи
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.

Два слова являются анаграммами, если одно можно получить из другого перестановкой букв.

На вход подаётся число \(N\), затем \(N\) слов (каждое с новой строки, все строчные).

Программа должна:

  • Разбить слова на группы анаграмм
  • Вывести каждую группу, в которой больше одного слова
  • Группы отсортировать по убыванию размера. При равном размере — по алфавиту первого слова
  • Слова внутри группы — в алфавитном порядке, через пробел

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 30\)).

Следующие \(N\) строк — по одному слову (строчные русские буквы).

Формат выходных данных

Группы анаграмм (только те, где больше одного слова). Слова в группе через пробел в алфавитном порядке. Каждая группа на отдельной строке.

Два слова являются анаграммами, если одно можно получить из другого перестановкой букв.

На вход подаётся число \(N\), затем \(N\) слов (каждое с новой строки, все строчные).

Программа должна:

  • Разбить слова на группы анаграмм
  • Вывести каждую группу, в которой больше одного слова
  • Группы отсортировать по убыванию размера. При равном размере — по алфавиту первого слова
  • Слова внутри группы — в алфавитном порядке, через пробел

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 30\)).

Следующие \(N\) строк — по одному слову (строчные русские буквы).

Формат выходных данных

Группы анаграмм (только те, где больше одного слова). Слова в группе через пробел в алфавитном порядке. Каждая группа на отдельной строке.

Два слова являются анаграммами, если одно можно получить из другого перестановкой букв. Например, «кот», «ток» и «кто» — это анаграммы друг друга.

На вход подаётся число \(N\), затем \(N\) слов (каждое с новой строки, все строчные).

Программа должна:

  • Разбить слова на группы анаграмм
  • Вывести каждую группу, в которой больше одного слова
  • Группы отсортировать по убыванию размера. При равном размере — по алфавиту первого слова
  • Слова внутри группы — в алфавитном порядке, через пробел

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 30\)).

Следующие \(N\) строк — по одному слову (строчные русские буквы).

Формат выходных данных

Группы анаграмм (только те, где больше одного слова). Слова в группе через пробел в алфавитном порядке. Каждая группа на отдельной строке.

Примечание

Подсказка: два слова — анаграммы, если при сортировке их букв получается одинаковый результат. Например, sorted("кот") и sorted("ток") оба дают ['к', 'о', 'т'].

Учитель ведёт журнал сдачи домашних заданий. На вход подаётся число \(N\) — количество записей. Затем \(N\) строк в формате:

имя предмет балл

Один ученик может сдавать задания по разным предметам.

Программа должна для каждого ученика подсчитать количество сданных заданий и суммарный балл. Вывести таблицу, отсортированную по убыванию количества заданий. При равном количестве — по возрастанию суммы баллов. При полном равенстве — в алфавитном порядке.

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 30\)).

Следующие \(N\) строк — имя, предмет и балл через пробел.

Формат выходных данных

Для каждого ученика строка в формате: Имя — X заданий, Y баллов

В зоопарке записали массу животных. На вход подаётся число \(N\) — количество животных. Затем вводятся \(N\) строк, в каждой через пробел: название животного и его масса в кг (целое число).

Программа должна собрать данные в словарь и вывести только тех животных, чья масса \(\ge 100\) кг, в формате Животное — масса, в порядке ввода.

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 15\)).

Следующие \(N\) строк — название и масса через пробел. Названия уникальны (одно слово).

Формат выходных данных

Строки в формате Животное — масса для животных с массой \(\ge 100\). Если таких нет, ничего не выводить.

На вход подаётся число \(N\) — количество товаров. Затем вводятся \(N\) строк, в каждой через пробел: название товара и его цена (целое число).

Программа должна собрать данные в словарь и вывести только те товары, цена которых строго больше 500, в формате Товар — цена, в порядке ввода.

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 15\)).

Следующие \(N\) строк — название и цена через пробел. Названия уникальны (одно слово).

Формат выходных данных

Строки в формате Товар — цена для товаров с ценой \(> 500\). Если таких нет, ничего не выводить.

На вход подаётся число \(N\) — количество учеников. Затем вводятся \(N\) строк, в каждой через пробел: имя ученика и его средний балл (целое число).

Программа должна собрать данные в словарь и вывести только тех учеников, чей средний балл \(\ge 5\), в формате Имя — балл, в порядке ввода.

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 15\)).

Следующие \(N\) строк — имя и балл через пробел. Имена уникальны.

Формат выходных данных

Строки в формате Имя — балл для учеников с баллом \(\ge 5\). Если таких нет, ничего не выводить.

Пользователь вводит количество чисел, а затем сами числа — каждое на отдельной строке. Сохраните все числа в список.

Выведите три строки:

  1. Исходный список — числа через пробел.
  2. Количество уникальных (различных) чисел.
  3. Уникальные числа через пробел в порядке возрастания.

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 20\)).

Следующие \(N\) строк — по одному целому числу (от \(-1000\) до \(1000\)).

Формат выходных данных

Первая строка — исходный список через пробел.

Вторая строка — количество уникальных чисел.

Третья строка — уникальные числа в порядке возрастания через пробел.

Примечание

Подсказка: преобразуйте список в множество с помощью set(), затем отсортируйте.

Пользователь вводит несколько слов через пробел. Постройте словарь, где ключ — слово, значение — его длина. Выведите пары в формате слово: длина, отсортированные по длине в порядке возрастания. Если длины одинаковые, сортируйте по алфавиту.

Формат входных данных

Одна строка — слова через пробел (от 2 до 15 слов). Все слова различны.

Формат выходных данных

Строки в формате слово: длина, отсортированные по длине (по возрастанию), при равенстве — по алфавиту.

Пользователь вводит количество учеников, а затем для каждого — имя и оценку. Сохраните данные в словарь. Выведите пары в формате Имя — оценка, отсортированные по имени в алфавитном порядке.

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 10\)).

Следующие \(N\) строк — имя и оценка через пробел. Имена уникальны, состоят из русских букв, начинаются с заглавной.

Формат выходных данных

\(N\) строк в формате Имя — оценка, отсортированные по имени (алфавитный порядок).

Пользователь вводит количество товаров, а затем для каждого — название и цену. Сохраните данные в словарь. Выведите только те товары, цена которых строго больше 100, в формате Товар: цена, в порядке ввода.

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 10\)).

Следующие \(N\) строк — название товара (одно слово) и целочисленная цена через пробел. Названия уникальны.

Формат выходных данных

Строки в формате Товар: цена для товаров с ценой больше 100, в порядке ввода. Если таких товаров нет, ничего не выводите.

✓ 9✗ 15500лёгкаяВойти и решать

Пользователь вводит количество учеников, а затем для каждого — имя и оценку. Сохраните данные в словарь. Выведите каждую пару в формате Имя — оценка, каждую на отдельной строке, в порядке ввода.

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 10\)).

Следующие \(N\) строк — имя и оценка через пробел. Имена уникальны.

Формат выходных данных

\(N\) строк в формате Имя — оценка (в порядке ввода).

Пользователь вводит количество учеников, а затем для каждого — имя и оценку. Сохраните данные в словарь. Выведите только оценки (значения), каждую на отдельной строке, в порядке ввода.

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 10\)).

Следующие \(N\) строк — имя и оценка через пробел. Имена уникальны.

Формат выходных данных

\(N\) строк — оценки (в порядке ввода).

Пользователь вводит количество учеников, а затем для каждого — имя и оценку. Сохраните данные в словарь. Выведите только имена (ключи), каждое на отдельной строке, в порядке ввода.

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 10\)).

Следующие \(N\) строк — имя и оценка через пробел. Имена уникальны.

Формат выходных данных

\(N\) строк — имена (в порядке ввода).

✓ 9✗ 2500лёгкаяВойти и решать

Пользователь вводит слово. Подсчитайте, сколько раз встречается каждая буква, и сохраните результат в словарь. Выведите пары буква: количество — каждую на отдельной строке, в алфавитном порядке букв.

Формат входных данных

Одна строка — слово (только строчные русские или латинские буквы, длина от 1 до 50).

Формат выходных данных

Для каждой уникальной буквы — строка вида буква: количество, в алфавитном порядке букв.

✓ 8✗ 4600лёгкаяВойти и решать

Пользователь вводит 3 строки. В каждой строке — название предмета и оценка через пробел. Сохраните данные в словарь (ключ — предмет, значение — оценка) и выведите каждую пару в формате Предмет — оценка, каждую на отдельной строке, в порядке ввода.

Формат входных данных

Три строки, в каждой — название предмета (одно слово) и целочисленная оценка через пробел.

Формат выходных данных

Три строки в формате Предмет — оценка (в порядке ввода).

Пользователь вводит количество людей, а затем для каждого — имя и возраст. Сохраните данные в словарь (ключ — имя, значение — возраст) и выведите каждую пару в формате Имя: возраст, каждую на отдельной строке, в порядке ввода.

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 10\)).

Следующие \(N\) строк — имя и возраст через пробел. Имена уникальны.

Формат выходных данных

\(N\) строк, каждая в формате Имя: возраст (в порядке ввода).

✓ 10✗ 10500лёгкаяВойти и решать
🗂️
Шаг 7: Реестр героев
Средне
Ты добрался до центральной базы данных. Каждый герой имеет позывной и уровень силы. Чтобы собрать команду для атаки на вирус, нужно быстро находить героев и определять сильнейшего.
Условие задачи
 

В первой строке дано N пар «позывной:уровень» через пробел (двоеточие без пробелов). Во второй строке — M позывных через пробел для запроса.

Для каждого запроса выведи уровень героя (через пробел в одну строку). На второй строке — позывной героя с наибольшим уровнем.

Входные данные

Первая строка: пары позывной:уровень через пробел. Вторая строка: запросы через пробел.

Выходные данные

Первая строка: уровни запрошенных героев через пробел. Вторая строка: позывной сильнейшего.

Подсказка: Разбей каждую пару через .split(":"), создай словарь. Для максимума: max(d, key=d.get).
🔍
Шаг 5: Частотный анализ
Средне
Мы засекли серию повторяющихся сигналов от вируса. Чтобы понять его логику, нужно определить, какой сигнал встречается чаще всего. Это ключевая частота!
Условие задачи
 

Дана строка целых чисел через пробел. Найди число, которое встречается чаще всего, и выведи два числа на отдельных строках: само число и сколько раз оно встречается.

Гарантируется, что такое число единственно.

Входные данные

Одна строка: набор целых чисел через пробел (от 1 до 100 чисел, значения от 0 до 1000).

Выходные данные

Две строки: число-лидер и его частота.

Подсказка: Собери частоты в словарь через d[x] = d.get(x, 0) + 1.
✓ 15✗ 14400лёгкаяВойти и решать

Как известно, в Отеле скучно не бывает: то фуршет, то номерки какие-то загадочные. А вот сейчас, для гостей опять подготовили нечто невероятное: приезжает Звезда.

Звезды — народ причудливый, вот например, Звезда, приехавшая в Отель, боится больших скоплений людей, поэтому поклонников на автограф-сессии будет принимать в специальном кабинете и только по одному, все же остальные гости будут ожидать в зале. И все бы хорошо, человечество давно придумало очереди, только вот во время сессии проходит фуршет, поэтому все разбредутся по залу и никакой очереди в ее привычном понимании устроить не получится и САО (служба администрирования очередей) решила обратиться к вам.

Вас просят написать систему учета людей, которая должна уметь выводить номер текущего первого в очереди гостя, добавлять людей в очередь и удалять из нее. Но мало того, что неразбериха с фуршетом, САО ещё и по неизвестной нам причине поощряет использование знакомств и связей в личных корыстных целях (в народе <<блат>>): если в зал приходит человек \(x\), то он хочет найти своего друга \(y\) и, если \(y\) находится в зале, то \(x\) в очереди становится прямо за ним, иначе \(x\) помещается системой в конец очереди. Также может произойти такое, что гостю надоело ждать и тогда он просто уходит из зала ожидания и исключается из очереди.

Конечно, обработка событий по видео-камерам — увлекательный процесс, но САО решили, что проще будет дать уже готовую последовательность данных. Итак, вашей системе нужно обрабатывать следующие запросы:

  1. in x y — в зал фуршета приходит гость с номером \(x\), который дружит с гостем номер \(y\). Если \(y\) уже находится в очереди, то \(x\) встает за ним, иначе в конец. Стоит отметить, что гости очень восхищаются Звездой и могут приходить и не по одному разу.

  2. out x — гостю под номером \(x\) надоело ждать и он уходит (гарантируется, что в данный момент гость с таким номером находится в зале).

  3. check — Звезда готова дать очередной автограф и САО хочет узнать, кто первый в очереди (после этого счастливец получит автограф и уйдет по своим делам). Если очередь пуста, выведите \(-1\).

Формат входных данных
В первой строке вводится единственное натуральное число \(q\) (\(1 \leq q \leq 200\,000\)) — количество запросов. Далее в \(q\) строках вводятся вышеописанные запросы. Все числа, содержащиеся в запросах натуральные и не превосходят \(10^8\).

Формат выходных данных
На каждый запрос \(check\) в отдельной строке выведете номер первого человека в очереди.

Поделиться
Класснуть