Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 15.12.2024
Сообщений: 1

Минимальное число для Васи

15.12.2024, 11:09. Показов 2511. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Порядок во всём

Ограничение по времени: 1,5 секунды
Ограничение по памяти: 256 мегабайт

Вася — очень порядочный мальчик, он любит порядок во всём.

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

Вася хочет, чтобы после дописывания цифр последнее число в списке оказалось наименьшим возможным. Найдите это число.

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

Первая строка входных данных содержит целое число n (2≤n≤3⋅105) — количество чисел в тетрадке у Васи.

Следующие n строк содержат n чисел, записанных в тетрадке, по одному в каждой строке. Все числа натуральные, не превосходящие 109.

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

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

Система оценки

Решения, верно работающие, когда n≤5 и при этом все числа в списке однозначные, будут оцениваться в 10 баллов.
Решения, верно работающие, когда n≤5 и при этом все числа в списке не превосходят 999, будут оцениваться в 20 баллов.
Решения, верно работающие, когда n≤5 без дополнительных ограничений на числа, будут оцениваться в 40 баллов.
Решения, верно работающие, когда n≤1000 без дополнительных ограничений на числа, будут оцениваться в 60 баллов.


Замечание

В первом примере числа уже упорядочены, Васе не нужно ничего дописывать.
Во втором примере Васе можно приписать ко второму числу цифру 3, тогда числа станут равны 13, а значит, будут расположены по неубыванию. При этом 13 — это минимально возможное последнее число.
В третьем примере Вася может, например, получить числа 20, 25, 100. Возможны и другие варианты, но последнее число при любом способе дописывания цифр получится не меньше 100.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.12.2024, 11:09
Ответы с готовыми решениями:

Определить минимальное число и номиналы банкнот и монет, необходимые для набора заданной суммы
Сделал обычным методом, необходимо сделать рекурсией: s = 12 print("5-ти рублевые монеты:", int(s/5)) s = s - (int(s/5)*5) ...

дано натуральное число (вводится с клавиатуры).Для каждого числа i, 0<i<=N определить за минимальное число ср
дано натуральное число N(вводится с клавиатуры).Для каждого числа i, 0&lt;i&lt;=N определить за минимальное число сравнений: делится ли число i...

Массив: Для чётных элементов узнать их суму, среднее арифметическое, максимальное число, минимальное число...
Есть 10 рандомных чисел. знаю которые из них чётные а которые нет. нужно отдельно для чётных узнать их суму, среднее арифметическое,...

4
3 / 2 / 1
Регистрация: 16.12.2024
Сообщений: 23
16.12.2024, 18:53
Python
1
2
3
4
5
6
7
8
n = int(input())
numbers = [input().strip() for _ in range(n)]
 
for i in range(1, n):
    if numbers[i] < numbers[i - 1]:
        numbers[i] = numbers[i - 1]
 
print(numbers[-1])
0
0 / 0 / 0
Регистрация: 12.09.2025
Сообщений: 1
12.09.2025, 12:11
Если очередное число уже больше или равно предыдущего числа (после дописывания цифр к предыдущему числу), то его нужно оставить без изменений. Если новое число является префиксом (началом) предыдущего числа, то нужно дописать цифры так, чтобы оно стало равно предыдущему числу. Во всех остальных случаях нужно дописывать нули, чтобы получить число такой же длины или на 1 большей длины.

Ответ:
48
50
67
300
820
820
6300
7010
54600
54600

Источник
0
 Аватар для andrey_f
882 / 535 / 228
Регистрация: 21.02.2011
Сообщений: 5,706
16.09.2025, 10:45
так чтоль
Python
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
n = int(input())
nums = [input().strip() for _ in range(n)]
 
def solve():
    res = [nums[0]]
    for i in range(1, n):
        prev, curr = res[-1], nums[i]
        
        if prev <= curr:
            res.append(curr)
            continue
            
        # Находим общий префикс
        j = 0
        while j < min(len(prev), len(curr)) and prev[j] == curr[j]:
            j += 1
        
        if j == len(curr):
            # curr - префикс prev
            suffix = prev[j:]
            if all(c == '9' for c in suffix):
                # Все девятки - нужно добавить разряд
                res.append(curr + '0' * (len(suffix) + 1))
            else:
                # Увеличиваем суффикс на 1
                new_suffix = str(int(suffix) + 1).zfill(len(suffix))
                res.append(curr + new_suffix)
        else:
            if j < len(prev) and prev[j] < curr[j]:
                res.append(curr)
            elif j < len(prev) and prev[j] > curr[j]:
                res.append(curr + '0' * (len(prev) - len(curr)))
            else:
                res.append(curr)
    
    return res[-1]
 
print(solve())
0
0 / 0 / 0
Регистрация: 15.09.2025
Сообщений: 6
01.10.2025, 16:44
andrey_f, засёк, у меня по времени Ваш вариант не проходит (по памяти не мерил).

Как не проходит по времени и мой вариант:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
n = int(input())
l = [int(input()) for _ in range(n)]
 
for i in range(1, n):
    if l[i] < l[i-1]:
        prev, curr = str(l[i-1]), str(l[i])
        if prev[:len(curr)] == curr:
            l[i] = l[i-1]
        else:
            while l[i] < l[i-1]:
                l[i] *= 10
 
print(l[-1])
Добавлено через 33 минуты
И такой вариант тоже не проходит по времени(

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
n = int(input())
l = [int(input()) for _ in range(n)]
 
for i in range(1, n):
    if l[i] < l[i-1]:
        prev, curr = l[i-1], l[i]
                
        curr_dig = 0
        while curr // 10**curr_dig > 0:  #  ищем количество разрядов в текущем числе
            curr_dig += 1
 
        if prev // 10** (curr_dig + 1) == curr:
            l[i] = l[i-1]
        else:
            while l[i] < l[i-1]:
                l[i] *= 10
 
print(l[-1])
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.10.2025, 16:44
Помогаю со студенческими работами здесь

Минимальное число вершин для раскраски рёбер
Какое наименьшее число вершин нужно взять, чтобы в полном графе с ребрами четырех цветов гарантированно нашелся треугольник с ребрами...

Определить минимальное число для каждой записи
Сформировать текстовый файл, каждая запись которого содержит 5 чисел, разделенных пробелами. Определить минимальное число для каждой записи.

Минимальное число ладей для заданного количества ходов.
Здравствуйте. У меня возникла проблема при решении следующей задачи: &quot;Имеется шахматная доска. Некоторые поля на ней заняты белыми...

Минимальное число наблюдений для экстраполяции экспоненциальной средней
Друзья, подскажите как подойти к решению следующей задачи Хочу сделать экстраполяцию экспоненциальной средней (просто продлить в...

Найти минимальное число лотерейных билетов для выигрыша
1)Среди билетов лотереи 2/3 выигрышных. Найти минимальное число билетов, что бы с вероятностью, не меньшей 0,9, быть уверенным в выигрыше...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru