На этом форуме отвечают на конкретные вопросы. Фраза «я не понимаю, как решать» — это не вопрос. На вопрос «как решить задачу №X» вас отошлют к материалам сайта kpolyakov.spb.ru. За бессвязный поток слов и неспособность формулировать свои мысли — бан.

Если у вас не сходится ответ на какую-то задачу, пожалуйста сразу представляйте свое «правильное» решение.
Программы "заворачивайте" в тэг [pre2]...[/pre2], при этом сохраняются все отступы и применяется моноширинный шрифт. Если у вас используется сочетание "[i]" для обозначения элемента массива или строки, ставьте пробел после открывающей скобки. Иначе система выделит все дальнейшее курсивом.

Для регистрации на форуме щелкните по ссылке «Вход-регистрация» вверху страницы. В открывшееся окошко «ник» введите свою фамилию на русском языке (например, Иванов). В окошко «пароль» введите придуманный вами пароль, состоящий из латинских букв и цифр. Поставьте галочку в окошке «зарегистрироваться, я новый участник» и нажмите кнопку «ОК».

АвторСообщение



Сообщение: 2
ссылка на сообщение  Отправлено: 30.08.22 15:52. Заголовок: прошу, помогите найти ошибку в решении задания 26-68


здравствуйте! никак не могу понять, где ошибка. Количество удаленных вирусов сходится, а время нет.
68) (Л. Шастин) Компьютер был заражён вирусами. Супервирусами называются самые опасные вирусы, уровень опасности которых превышает средний уровень опасности всех имеющихся. Нужно определить, какое максимальное количество вирусов можно удалить за заданное время по следующим правилам:
- необходимо удалить как можно больше супервирусов;
- нельзя удалять два и более супервируса подряд;
- нельзя удалять супервирус последним.
Входные данные представлены в файле 26-68.txt следующим образом. Первая строка входного файла содержит количество записей N и общее время T, отведённое на удаление этих вирусов. Каждая из следующих N строк содержит два целых числа: уровень опасности вируса и время, которое требуется для его удаления.
Запишите в ответе два числа: сначала общее количество вирусов, которое удалось удалить, затем суммарное время, которое было затрачено на удаление супервирусов.
Пример входного файла:
5 50
7 13
9 20
4 3
8 9
5 5
Средний уровень опасности равен 6.6, значит, суперопасными считаются вирусы с уровнем опасности >= 7. Удаляем сначала супервирус 8-9, далее обычный вирус 4-3, потом снова суперопасный 7-13, затем обычный 5-5. Обычных вирусов не осталось, значит, суперопасные тоже удалять нельзя. Итого удалено 4 вируса. На удаление супервирусов затрачено времени 9 + 13 = 22. Ответ: 4 22.


from math import floor 
with open(r'C:\Users\Редакция\Desktop\26-68.txt') as file:
n, time = list(map(int, file.readline().split()))
data = [[int(i.split()[0]), int(i.split()[1])] for i in file.readlines()]
sr_list = [i[0] for i in data]
sr = sum(sr_list) / len(data)
supervirus = sorted([i for i in data if i[0] > sr], key=lambda x: x[1])
other = sorted([i for i in data if i not in supervirus], key=lambda x: x[1])
t = 0
co = 0
s = 0
for i in range(len(other) * 2 - 1):
if i % 2 == 0:
i = int(i / 2)
if s + supervirus[1] <= time:
t += supervirus[1]
co += 1
s += supervirus[1]
else:
i = floor(i / 2)
if s + other[1] <= time:
co += 1
s += other[1]
print(co, t)


P.S. везде в теле цикла двойная индексация с первым индексом i, однако она почему-то не отображается :)

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 2 [только новые]





Не зарегистрирован
ссылка на сообщение  Отправлено: 31.08.22 10:59. Заголовок: Здравствуйте! В перв..


Здравствуйте!
В первом ветвлении нужно поменять условие добавления супервирусов.
Будет верно так -> if s + supervirus[1] + other[1] <= time: {действие}
Из условия имеем, что супервирус не может быть удален последним. В вашем случае это условие нарушается - удаляете последним ещё один (уже лишний) супервирус.
Добавляем дополнительную проверку, которая выясняет, сможем ли мы после удаления этого супервируса удалить обычный (чтобы не нарушить порядок). Если да - удаляем.
Иначе уже переходим в блок else.

Спасибо: 1 
ПрофильЦитата Ответить



Сообщение: 4
ссылка на сообщение  Отправлено: 04.09.22 05:16. Заголовок: LeoShastin2601 пишет..


LeoShastin2601 пишет:

 цитата:
Из условия имеем, что супервирус не может быть удален последним. В вашем случае это условие нарушается - удаляете последним ещё один (уже лишний) супервирус.


спасибо большое! мне тогда почему-то показалось, что нечётность последнего i в цикле будет достаточным условием, но это, конечно, не так)

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 1438
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет