Кузьме задали прочитать список книг разных авторов. Ознакомившись со списком авторов Кузьма удивился, ведь ранее он уже читал их произведения. Для каждого автора у Кузьмы определен показатель "интересности"
W i
, влияющий на скорость чтения книги следующим образом:
в первый день чтения книги Кузьма прочитает
1 0 ∗ W − 1 страниц (где W − 1 - текущий интерес к чтению) во второй и последующие дни чтения книги Кузьма будет читать 1 0 ∗ W i страниц ( W i -интересность текущей книги)Кузьма может читать книги в любом порядке, но если он взялся за определенную книгу - он обязательно дочитывает ее до конца. В день, когда Кузьма дочитал очередную книгу, он не берется за новую (не зависимо от того, сколько страниц он прочитал сегодня), при этом завтра, начав новую книгу, его интерес к чтению будет равен текущему.
Теперь Кузьма просит Вас посчитать: какое минимальное кол-во дней ему необходимо для прочтения заданного списка книг?
Формат ввода
В первой строке содержатся два числа: N ( 1 ≤ N ≤ 7 ) - кол-во книг и W 0 ( 1 ≤ W 0 ≤ 1 0 ) - стартовый интерес к чтению В последующих N строках содержатся по два числа: K i ( 1 ≤ K ≤
1000 ), W i ( 1 ≤ W i ≤ 10) - кол-во страниц в книге и ее интересность
Формат вывода
Выведите число: минимальное кол-во дней, необходимое для прочтения всех книг
Пример
Ввод Вывод
4 5
100 10
290 5
300 7
100 1
14
Примечания
Порядок прочтения книг в примере: 2-3-1-4
Кол-во страниц по дням Книга 2: 50+50+50+50+50+40, Книга 3: 50+70+70+70+40, Книга 1: 70+30, Книга 4: 100 - итого 6+5+2+1=14 дней
На print("Добро пожаловать в программу расчета времени чтения для Кузьмы!"
while True:
try:
N = int(input("Введите количество книг (от 1 до 7): ")
if 1 <= N <= 7:
break
else:
print("Пожалуйста, введите число от 1 до 7."
except ValueError:
print("Пожалуйста, введите корректное целое число."
while True:
try:
W0 = int(input("Введите начальный интерес к чтению (от 1 до 10): ")
if 1 <= W0 <= 10:
break
else:
print("Пожалуйста, введите число от 1 до 10."
except ValueError:
print("Пожалуйста, введите корректное целое число."
books = []
for i in range(N):
print(f"\nКнига {i+1}:"
while True:
try:
pages = int(input("Введите количество страниц (от 1 до 1000): ")
if 1 <= pages <= 1000:
break
else:
print("Пожалуйста, введите число от 1 до 1000."
except ValueError:
print("Пожалуйста, введите корректное целое число."
while True:
try:
interest = int(input("Введите интересность книги (от 1 до 10): ")
if 1 <= interest <= 10:
break
else:
print("Пожалуйста, введите число от 1 до 10."
except ValueError:
print("Пожалуйста, введите корректное целое число."
books.append((pages, interest))
books.sort(key=lambda x: x[1], reverse=True)
total_days = 0
current_interest = W0
for pages, interest in books:
pages_read = min(pages, 10 * (current_interest - 1))
days = 1
pages -= pages_read
if pages > 0:
days += (pages + 10 * interest - 1) // (10 * interest)
total_days += days
current_interest = interest
print(f"\nМинимальное количество дней, необходимое для прочтения всех книг: {total_days}"
print("\nОптимальный порядок чтения книг:"
sorted_books = sorted(enumerate(books, 1), key=lambda x: x[1][1], reverse=True)
for i, (pages, interest) in sorted_books:
print(f"Книга {i}: {pages} страниц, интересность {interest}"
Ну что ты, мы же тут сейчас, в полчетвертого утра, с радостью поможем тебе. Выполним все твои капризы. Мы будем напрягаться, а ты просто будешь сидеть и даже ни капли не вникнешь в тему.