Форум » Массивы, сортировка, работа с файлами » Возможно опечатка или ошибка в задаче КИМ 26 » Ответить

Возможно опечатка или ошибка в задаче КИМ 26

SergeyK: Здраствуйте! Мой алгоритм выдает 1355 и 225. (Почему написано 1377 255?) На больших данных: 464810 602 В тесте на сайте http://kpolyakov.spb.ru/school/ege/gen.php?action=viewAllEgeNo&egeId=26&cat160=on: 464632 602 То-ли продавец хитрее, то-ли где-то ошибка :-)

Ответов - 7

Поляков: SergeyK пишет: То-ли продавец хитрее, то-ли где-то ошибка Показывайте решение. Будем разбираться.

SergeyK: [pre2] ''' − на каждый второй товар ценой больше 200 рублей предоставляется скидка 30%; − общая цена покупки со скидкой округляется вверх до целого числа рублей; − порядок товаров в списке определяет магазин и делает это так, чтобы общая сумма скидки была наименьшей. Вам необходимо определить общую цену закупки с учётом скидки и цену самого дорогого товара, на который будет предоставлена скидка. Входные данные. Первая строка входного файла 26-s1.txt содержит число N – общее количество купленных товаров. Каждая из следующих N строк содержит одно целое число – цену товара в рублях. В ответе запишите два целых числа: сначала общую цену покупки с учётом скидки, затем цену самого дорогого товара, на который предоставлена скидка. Пример входного файла 7 225 160 380 95 192 310 60 В данном случае товары с ценой 60, 95, 160 и 192 не участвуют в определении скидки, остальные товары магазину выгодно расположить в таком порядке цен: 380, 225, 310. Скидка предоставляется на товар ценой 225. Его цена со скидкой составит 157,5 руб., после округления – 158 руб. Общая цена покупки составит: 60 + 95 + 160 + 192 + 158 + 380 + 310 = 1355 руб. Самый дорогой товар, на который будет получена скидка, стоит 225 руб. В ответе нужно записать числа 1377 и 225. ''' import sys import math #save_stdin = sys.stdin #sys.stdin = open("24_2.txt") k = 0.3 # 30% s = 0 mx = 0 i = 1 minPr = [] # p < 200 maxPr = [] # p >= 200 ans = [] # для отладки n = int(input()) for i in range(n): p = int(input()) if p > 200: maxPr.append(p) else: minPr.append(p) s = sum(minPr) # всё что меньше или равно 200 суммируем сразу ans += minPr # складываем в [] для визуализации результата maxPr.sort() # всё, что больше 200 сортируем maxPr_len = len(maxPr) mid = maxPr_len // 2 # вычисляем середину half_maxPr1 = maxPr[mid :] # дорогие товары half_maxPr2 = maxPr[:mid] # дешёвые товары s += sum(maxPr[mid :]) # дорогие сразу суммируем (скидки не делаем) ans += maxPr[mid :] # складываем в [] для визуализации результата # на дешёвые, которые > 200 делаем скидки for p0 in maxPr[:mid]: p = math.ceil((1 - k) * p0) #print("p% = ", p) if p0 > mx: mx = p0 s += p # товар со скидкой добавляем к общей сумме ans.append(p) ans.sort() # складываем в [] для визуализации результата print(s, mx) # общая сумма и максимальный товар, на который была скидка print(*ans) # все товары print(sum(ans)) print(len(ans)) #sys.stdin =save_stdin [/pre2] #======================= >>> %Run 24_2.py 7 225 160 380 95 192 310 60 1355 225 60 95 158 160 192 310 380 1355 7 >>> Скидка предоставляется на товар ценой 225. Его цена со скидкой составит 157,5 руб., после округления – 158 руб. Общая цена покупки составит: 60 + 95 + 160 + 192 + 158 + 380 + 310 = 1355 руб. Самый дорогой товар, на который будет получена скидка, стоит 225 руб.

SergeyK: Так не пойдёт. Я пока не разобрался с этим форумом, как вставлять код, что бы отступы не исчезали... Сейчас ссылку на нормальный код передам.


Поляков: SergeyK пишет: как вставлять код, Вставить в блок pre2:\[pre2\] ... код [\/pre2] . Здесь все знаки \ нужно убрать.

SergeyK: [url=https://repl.it/@intepra/kEGE24-2#main.py]Ссылка на задачу[/url] Видимо @ не даёт форуму корректно обработать ссылку Тогда так: https://clck.ru/RpXdE Если снять комментарии: #save_stdin = sys.stdin #sys.stdin = open("24_2.txt") #sys.stdin =save_stdin Будут обработаны большие данные

Поляков: SergeyK пишет: [url=https://repl.it/@intepra/kEGE24-2#main.py]Ссылка на задачу[/url] Вы округляете вверх стоимость каждой покупки со скидкой, а нужно округлять общую сумму.

SergeyK: Ox, спасибо большое! Как все просто оказалось, как можно быть таким невнимательным: "− общая цена покупки со скидкой округляется вверх...."



полная версия страницы