Top.Mail.Ru
Ответы

Задача "Большая загрузка"

Пользователь сел за компьютер, в котором была очищена папка 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')

Аватар пользователя
Просветленный
1234567891011121314151617181920212223
 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)