- Описание
- Отправленные решения
336. Иван и opensource
В ходе решения рабочей задачи программист Иван написал библиотеку, которая показалась ему полезной и для сообщества. Обсудив детали с руководителем и получив согласие, он решил выложить её в opensource. Но рабочий репозиторий содержит файлы, описывающие внутреннюю кухню, а их, как известно, нельзя выкладывать за пределы монорепозитория компании.
Иван убедился, что на работу библиотеки эти файлы никак не влияют. Поэтому Иван решил автоматически удалить их из библиотеки. У него есть список файлов, относящихся к библиотеке, а также чёрный список, содержащий пути ко внутренним файлам репозитория. Далее Иван собирается удалить все файлы библиотеки, которые находятся в директориях из чёрного списка.
Вам же необходимо написать программу, которая соберёт статистику по удалённым файлам из директорий.
Формат ввода
В первой строке входных данных записано целое число ().
В следующих строках указаны директории из чёрного списка (могут повторяться). Директорией является или строка /
, или строка вида <dir><folder>/
, где <dir>
— это строка, также являющаяся директорией, а <folder>
— это непустая строка из строчных латинских букв, цифр или символа _
. Например, /
, /abcd/
, /_0kda/sasw/
— корректные директории, а /asds
, /sds/v.c
, /asd//ds/
— некорректные директории.
Затем записано целое число ().
В следующих строках указаны пути к файлам библиотеки без повторений. Путь к файлу имеет вид <dir><fullName>
, где <fullName>
является конкатенацией непустых строк <name>
и <ext>
. Строка <name>
состоит из строчных латинских букв, цифр и символа _
. Строка <ext>
начинается с точки, после которой следуют строчных латинских букв . Например, /asd/d.txt
, /a.q
, /a/b/c/d.efg
— корректные пути к файлам, а /asd/d
, /a/b/c.d.e
— некорректные пути к файлам.
Далее записано целое число () — количество запросов.
В следующих строках указаны директории (могут повторяться), на каждую из которых необходимо в дальнейшем собрать статистику.
Суммарно в тестовых данных не более символов.
Формат вывода
Для каждого запроса сначала выведите целое число — количество различных расширений файлов, удалённых по этому запросу.
Затем для каждого расширения <ext>
укажите количество <count>
удалённых файлов данного расширения в формате <ext>: <count>
.
Порядок вывода расширений неважен.
Ограничения
Ограничение времени
5 с
Ограничение памяти
512 МБ
Пример 1
2
/project/internal/
/project/docs/
5
/project/docs/internal.md
/project/lib/header.cpp
/project/lib/header.h
/project/bin/main.cpp
/project/internal/secret.h
3
/
/project/internal/
/project/lib/
2
.md: 1
.h: 1
1
.h: 1
0
Пример 2
2
/lib/folder_1/
/lib/folder_2/folder_3/
7
/lib/a.cpp
/lib/folder_2/b.cpp
/lib/folder_1/c.cpp
/lib/folder_2/folder_4/d.cpp
/lib/folder_1/folder_5/e.cpp
/lib/folder_2/folder_3/folder_6/f.py
/lib/folder_2/folder_3/g.cpp
3
/lib/
/lib/folder_1/
/lib/folder_2/
2
.cpp: 3
.py: 1
1
.cpp: 2
2
.py: 1
.cpp: 1