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

Задача на Python (Задача сапожника)

20.04.2024, 10:20. Показов 881. Ответов 1

Студворк — интернет-сервис помощи студентам
Код и условия задачи представлены ниже. Проблема: код ничего не выводит. В чём ошибка?

У сапожника имеется N заказов от покупателей, которые он должен выполнить. Сапожник может заниматься в день только одним заказом, и заказы обычно требуют на выполнение несколько дней. Для i-го заказа целое число Ti
(1 ≤ Ti ≤ 1000) означает число дней, необходимых сапожнику для завершения заказа.
Но за популярность нужно платить. За каждый день задержки перед тем, как он приступит к работе над i-м заказом, сапожник согласился платить штраф в размере Si (1 ≤ Si ≤ 1000) центов в день. Помогите сапожнику, написав программу, находящую последовательность работ, ведущую к минимальному штрафу.

Входные данные
Входные данные начинаются со строки, содержащей одно положительное целое число, которое означает количество тестовых блоков, за которой следует пустая строка. Между двумя последовательными тестовыми блоками также находится пустая строка.
Первая строка каждого блока содержит целое число, задающее число заказов N, причем 1 ≤ N ≤ 1000. i-я последующая строка содержит время завершения Ti и ежедневный штраф Si для i-го заказа.

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

Пример входных данных
1
4
3 4
1 1000
2 2
5 5

Соответствующие выходные данные
2 13 4 

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
def minimize_penalty(orders):
    # Сортировка заказов по двум критериям: штрафу и времени выполнения
    orders.sort(key=lambda x: (x[1], x[0]))
 
    min_penalty = float('inf')  # Начальное значение минимального штрафа
    result = []  # Результат, содержащий последовательность заказов
    current_penalty = 0  # Текущий штраф
 
    for i, (days, penalty) in enumerate(orders):
        current_penalty += days * penalty
        # Если текущий штраф меньше минимального, обновляем результат
        if current_penalty < min_penalty:
            min_penalty = current_penalty
            result = [i + 1]  # Обновляем результат с новым заказом
        # Если текущий штраф равен минимальному, добавляем заказ в результат
        elif current_penalty == min_penalty:
            result.append(i + 1)
 
    return result
 
 
# Чтение входных данных
def read_input():
    test_cases = int(input())
    input_data = []
 
    for _ in range(test_cases):
        _ = input()  # Пропускаем пустую строку
        n = int(input())  # Количество заказов
        orders = []
        for _ in range(n):
            days, penalty = map(int, input().split())
            orders.append((days, penalty))
        input_data.append((n, orders))
 
    return input_data
 
 
 
 
# Основная функция для обработки всех тестовых блоков
def main():
    input_data = read_input()
 
    for n, orders in input_data:
        result = minimize_penalty(orders)
        print(*result)
 
        if input_data.index((n, orders)) < len(input_data) - 1:
            print()  # Разделитель для следующего тестового блока
 
 
if __name__ == "__main__":
    main()
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.04.2024, 10:20
Ответы с готовыми решениями:

Задача на python
Распространенность (A) числа n определяется как: (сумма делителей числа n) / n Например: A(8) = (1 + 2 + 4 + 8) / 8 = 15/8 ...

Задача "проблема сапожника"
В некоей воинской части есть сапожник. Рабочий день сапожника длится N минут. Заведующий складом оценивает работу сапожника по количеству...

Задача про сапожника, не проходит тест
В некоей воинской части есть сапожник. Рабочий день сапожника длится n минут. Заведующий складом оценивает работу сапожника по количеству...

1
964 / 485 / 241
Регистрация: 02.06.2016
Сообщений: 760
20.04.2024, 14:56
Лучший ответ Сообщение было отмечено Airadarey как решение

Решение

Airadarey,
Python
1
2
3
4
5
from functools import cmp_to_key
for _ in range(int(input())):
    w = [(*map(int, input().split()), k+1) for k in range(int(input()))]
    w.sort(key=cmp_to_key(lambda x, y: x[0]*y[1]-y[0]*x[1] or x[2]-y[2]))
    print(*(x[2] for x in w))
Добавлено через 6 минут
или так.. нужно тесты смотреть
Python
1
2
3
for _ in range(int(input())):
    w = [(*map(int, input().split()), k+1) for k in range(int(input()))]
    print(*(x[2] for x in sorted(w, key=lambda x: (x[0] / x[1], x[2]))))
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.04.2024, 14:56
Помогаю со студенческими работами здесь

Задача на Python
Задача 1.3 (LCD-дисплей) Ваш друг только недавно купил себе новый компьютер. До этого самой мощной машиной, которую он когда-либо...

Задача Статистика python
Господа программисты помогите, пожалуйста, с решением задачи. Всё решение разумеется не прошу. Подскажите, пожалуйста, как взять данные из...

Задача на python по теме функции

Задача Python. Рекурсивные функции
Рекурсивно описать функцию divs(N) для подсчета количества всех делителей целого числа N (N&gt;1), без учета делителей 1 и N.

Python олимпиадная задача на граф
Формат входных данных В первой строке дано целое число t (1 ≤ t ≤ 10^4) — количество наборов входных данных. В первой строке каждого...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru