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

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

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

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



Сообщение: 3
ссылка на сообщение  Отправлено: 25.05.21 20:46. Заголовок: Задание № 27. Задача 2664


Условие:
(№ 2664) Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары ровно одно число так, чтобы сумма всех выбранных чисел делилась на 5 и при этом была максимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число – максимально возможную сумму, соответствующую условиям задачи.
Входные данные. Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество пар N (1 ≤ N ≤ 100000). Каждая из следующих N строк содержит два натуральных числа, не превышающих 10 000.
Пример входного файла:
6
1 3
5 11
6 9
5 4
3 3
1 1
Для указанных входных данных значением искомой суммы должно быть число 30.
В ответе укажите два числа: сначала значение искомой суммы для файла А, затем для файла B.
Ответы: 123720 402332230

Мое решение:
 
f = open('1.txt')
n = int(f.readline())
list_2 = [10001]*4
sum1 = 0
for i in range(n):
e, z = map(int, f.readline().split())
if 5 > (abs(e - z)) % 5 > 0:
if (abs(e - z)) % 5 == 1:
if list_2[0] > abs(e - z):
list_2[0] = abs(e - z)
if (abs(e - z)) % 5 == 2:
if list_2[1] > abs(e - z):
list_2[1] = abs(e - z)
if (abs(e - z)) % 5 == 3:
if list_2[2] > abs(e - z):
list_2[2] = abs(e - z)
if (abs(e - z)) % 5 == 4:
if list_2[3] > abs(e - z):
list_2[3] = abs(e - z)
sum1 += max(e, z)
if sum1 % 5 != 0:
sum1 -= list_2[(sum1 % 5) - 1]
print(sum1)
else:
print(sum1)


Мои ответы:
файл А 123430
файл В 402332230

Мой ответ не сходится с ответом для файла А. Ошибся я в коде или опечатка в ответе к заданию?

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


Администратор




Сообщение: 2822
ссылка на сообщение  Отправлено: 25.05.21 20:52. Заголовок: Вы не учитываете, чт..


Вы не учитываете, что оптимальное решение может быть получено несколькими заменами. Посмотрите разбор задачи 27.Р-01 или авторское решение задачи 4 из основного сборника.

___________________________________________________
Имей мужество пользоваться собственным умом. (И. Кант)
Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 4
ссылка на сообщение  Отправлено: 25.05.21 20:59. Заголовок: Понял, спасибо)..


Понял, спасибо)

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



Сообщение: 5
ссылка на сообщение  Отправлено: 25.05.21 21:21. Заголовок: А где можно скачать ..


А где можно скачать основной сборник?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Сообщение: 2825
ссылка на сообщение  Отправлено: 25.05.21 21:24. Заголовок: nikolya29 пишет: А г..


nikolya29 пишет:
 цитата:
А где можно скачать основной сборник?

Здесь. Файл с материалами по заданию 27.

___________________________________________________
Имей мужество пользоваться собственным умом. (И. Кант)
Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 6
ссылка на сообщение  Отправлено: 26.05.21 11:47. Заголовок: Спасибо! А вот тако..


Спасибо!

А вот такой алгоритм учитывает все возможные варианты входных данных?
 
f = open('1.txt')
n = int(f.readline())
list_2 = [0] + [10001] * 4
sum1 = 0
for i in range(n):
e, z = map(int, f.readline().split())
if 5 > (abs(e - z)) % 5 > 0:
if (abs(e - z)) % 5 == 1:
if list_2[1] > abs(e - z):
list_2[1] = abs(e - z)
if (abs(e - z)) % 5 == 2:
if list_2[2] > abs(e - z):
list_2[2] = abs(e - z)
if (abs(e - z)) % 5 == 3:
if list_2[3] > abs(e - z):
list_2[3] = abs(e - z)
if (abs(e - z)) % 5 == 4:
if list_2[4] > abs(e - z):
list_2[4] = abs(e - z)
sum1 += max(e, z)
if sum1 % 5 == 4:
if list_2[4] > (list_2[1] + list_2[3]):
print(sum1 - list_2[1] - list_2[3])
else:
print(sum1 - list_2[4])
elif sum1 % 5 == 3:
if list_2[3] > (list_2[1] + list_2[2]):
print(sum1 - list_2[1] - list_2[2])
else:
print(sum1 - list_2[3])
elif sum1 % 5 == 2:
print(sum1 - list_2[2])
elif sum1 % 5 == 1:
print(sum1 - list_2[1])
else:
print(sum1)



Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Сообщение: 2828
ссылка на сообщение  Отправлено: 26.05.21 11:54. Заголовок: Думаю, что нет. ИМХО..


Думаю, что нет. ИМХО возможность множественной замены нужно "вести" в цикле, в вашем решении этого нет.

___________________________________________________
Имей мужество пользоваться собственным умом. (И. Кант)
Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 25
ссылка на сообщение  Отправлено: 15.06.21 06:47. Заголовок: Пишу чисто для того, кто задал эту тему


Моё решение задачи с учётом бесконечного множества замен на основе массива разниц :S https://egekp.unoforum.pro/?1-16-0-00000256-000-0-0-1623728180
Конечно в реальных условиях можно на дурачка найти ответ, просто вывев сортированный массив разниц и там будет видно, что САМЫЕ первые 2 числа разниц и будут давать верный ответ (но не по отдельности), но мой вариант круче XD

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

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