Задача "Большая загрузка"
Пользователь сел за компьютер, в котором была очищена папка Downloads, открыл браузер и стал скачивать файлы с различных сайтов. Каждый файл задаётся полным названием, которое состоит из имени и, возможно, расширения.
Имя файла непусто и может быть составлено из строчных латинских букв или цифр от 0 до 9. Если расширение файла непусто, то сразу после имени идёт одна точка (.), а затем — расширение: строка длиной от 1 до 10, состоящая из строчных латинских букв или цифр. Если расширение файла пусто, точка после имени не ставится (то есть в полном названии файла не более одной точки, а при наличии точки в полном имени файла после неё обязано идти расширение).
Если пользователь более раза скачал файл с одним и тем же полным названием, то сразу после имени файла в скобках записывается номер скачивания (считая первое скачивание, при котором индекс приписан не был, за нулевое): например, при втором скачивании файла problem.cfg на диске окажутся файлы problem.cfg и problem(1).cfg в папке Downloads, при двенадцатом скачивании файла game содержимое запишется в файл game(11) в папке Downloads.
Вам даётся на вход список имён файлов в порядке загрузки. Вывести список файлов в папке Downloads по итогам загрузки, отсортированный лексикографически по возрастанию (числа при этом также сравниваются как строки, то есть файлы a.zip, a(1).zip, a(2).zip и a(10).zip будут идти в порядке a(1).zip, a(10).zip, a(2).zip, a.zip).
Система оценки
Задача состоит из четырёх подзадач.
В первой подзадаче имена всех скачанных файлов одинаковы, ни у одного файла нет расширения. Эта подзадача оценивается в 9 баллов.
Во второй подзадаче имена всех скачанных файлов различны. Эта подзадача оценивается в 22 балла.
В третьей подзадаче количество скачанных файлов не более 100. Эта подзадача оценивается в 31 балл.
В четвёртой подзадаче дополнительных ограничений нет. Эта подзадача оценивается в 38 баллов.
Формат входных данных
Первая строка входных данных содержит одно целое число N — количество скачанных файлов (1 ≤ N < 105).
Каждая из последующих N строк содержит полное имя файла — непустую строку длиной не более 250 символов, состоящую из строчных латинских букв и цифр от 0 до 9, а также не более одной точки. В случае, если точка в имени файла есть, до точки есть хотя бы один символ, а после точки идёт не менее одного и не более 10 символов, представляющих собой строчные латинские буквы или цифры.
Формат выходных данных
Выведите N строк — полные имена файлов в папке Downloads по итогам загрузки всех файлов, отсортированные лексикографически по возрастанию (то есть в случае, если у строк первые k символов одинаковы, а k+1-й — нет, раньше идёт строка, у которой код k+1-го символа меньше, если в одной из строк при этом ровно k символов, то раньше идёт она).
Пример 1
Входные данные:
11
song.mp3
problem.cfg
problem
picture.png
problem.cfg
sol123.c
data.dat
problem
sol13.c
sol123.c
song.mp3
Выходные данные:
data.dat
picture.png
problem
problem(1)
problem(1).cfg
problem.cfg
sol123(1).c
sol123.c
sol13.c
song(1).mp3
song.mp3
*Решать эту задачу можно не только на пайтон, но и на любом другом языке
from os import path
d = {}
res = []
for _ in range(int(input())):
name = input()
if name not in d:
d[name] = 0
else:
d[name] += 1
root, ext = path.splitext(name)
name = f'{root}({d[name]}){ext}'
res.append(name)
print(*sorted(res), sep='\n')
def get_download_names(file_names):
download_counts = {}
result = []
for file_name in file_names:
if file_name in download_counts:
download_counts[file_name] += 1
new_file_name = f"{file_name}({download_counts[file_name]})"
result.append(new_file_name)
else:
download_counts[file_name] = 0
result.append(file_name)
return sorted(result)
# Чтение входных данных
n = int(input())
file_names = []
for _ in range(n):
file_names.append(input())
# Вызов функции и вывод результата
result = get_download_names(file_names)
for file_name in result:
print(file_name)