Статья Автор: Лебедев Дмитрий

Разбор задания типа 26 из 0-го варианта семестровой

Ежегодно библиотека пополняет свой книжный фонд. На закупку новых книг выделяется определённая сумма, которую нельзя превысить.
На эту сумму библиотеке необходимо закупить максимальное количество книг, среди которых должны быть ровно две редкие книги, одна из которых имеет наименьшую стоимость, а другая - наибольшую, также все энциклопедии.
Известно, что стоимость редких книг превышает 3000 рублей. Стоимость энциклопедий находится в диапазоне от 2000 до 3000 рублей включительно. Стоимость любой другой книги меньше 2000 рублей.
По заданной информации о выделенной сумме на покупку книг и стоимости каждого наименования определите максимальное количество книг, которые может приобрести библиотека, и стоимость самой дорогой книги, не относящейся к категории редких и энциклопедий, при условии, что в итоге будут куплено наибольшее количество книг.

Входные данные:
На вход подается имя файла.

  • В первой строке входного файла находятся два числа: S - выделенная на покупку книг сумма ( натуральное число, не превышающее 500 000)
    и N - количество наименований книг (натуральное число, не превышающее 1000).
  • В следующих N строках находятся значения стоимости книг каждого наименования (все числа натуральные, не превышающие 5000), каждое в отдельной строке.

 Выходные данные: 
Запишите в ответе два числа, записанные через пробел: сначала наибольшее число различных наименований книги, которые могут быть закуплены,
затем максимальную стоимость книги, не относящейся к категории редких и энциклопедий, при условии, что в итоге будут куплено наибольшее количество книг.

 

Пример входного файла
Выходные данные Пояснение
11000 8
200
3800
3500
500
3100
800
4100
2500
5 800 При таких исходных данных можно приобрести максимум 5 книг:
две редкие стоимостью 3100 и 4100, одну энциклопедию за 2500
и две обычных стоимостью 200 и 800. 


Для решения задания надо разбить все книги на три группы:
  1. Редкие книги (стоимость больше 3000)
  2. Энциклопедии (стоимость не больше 3000 и не меньше 2000)
  3. Остальные (стоимость менее 2000)
Из группы 1 купить max и min, группу 2 купить целиком, а из 3 группы купить ...


Блок поиска улучшения может быть написан более эффективно (через "обратную" сортировку с использованием pop и даже с использованием бинарного поиска)

Задания из тренировки 3 (#1)
В проекте «СкупойПлатитДважды» 1 января решено тратить на развитие 60% накоплений всех участников. При этом 20% самых богатых участников вносят  80% от своих накоплений, остальные участники вносят равный процент таким образом, чтобы общая сумма взносов всех участников составила 60%, обозначенные выше.
Запишите в ответе два целых числа: сумма взноса от всех «богатых» участников проекта и сумма взноса участника с самым небольшим размером накоплений. Если в результате получаются дробные числа, нужно записать их целые части.

Входные  данные
В первой строке входного файла записано натуральное число N – количество участников проекта (20 ≤ N ≤ 1000).
В следующих N строках находятся значения – размер накоплений всех пользователей (все числа натуральные, не превышающие 1000), каждое в отдельной строке. 
Выходные данные
Запишите в ответе два целых числа: сумма взноса от всех «богатых» участников проекта и сумма взноса участника с самым небольшим размером накоплений.
Если в результате получаются дробные числа, нужно записать их целые части. Числа записываются в одну строку через пробел.

Алгоритм решения
  1. Ввод данных
  2. Обработка
  3. Вывод результатов
Реализуем 1 этап, считая, что данные в файле '26-tr301.txt'


2 этап.
После того, как увидели  N можно  определить
  • k_rich = 20% самых богатых
  • snak - сумму всех накоплени и 60% от неё
  • s_rich - сумму накоплений 20% богатых
  • найти сумму которую будут вносить остальные
Вначале данные надо отсортировать. Как?  Возьмем стандартную
 


Осталось вычислить коэфф. взноса для каждого из остальных, при этом никаких требований на округления нет
kf = vz_ / s_
Выводим ответы (целые части)  и kf а %


Задание из тренировки 3 (№3)
Для перевозки партии грузов различной массы выделен грузовик, но его грузоподъёмность ограничена, поэтому перевезти сразу все грузы не удастся. Грузы массой от 180 до 200 кг включительно грузят в первую очередь, выбирая грузы по убыванию массы, начиная с самого тяжёлого. На оставшееся после этого место стараются взять как можно большее количество грузов. Если это можно сделать несколькими способами, выбирают тот способ, при котором самый большой из выбранных грузов имеет наибольшую массу. Если и при этом условии возможно несколько вариантов, выбирается тот, при котором наибольшую массу имеет второй по величине груз, и т.д. Известны количество грузов, масса каждого из них и грузоподъёмность грузовика. Необходимо определить количество и общую массу грузов, которые будут вывезены при погрузке по вышеописанным правилам.

Входные и выходные данные.
На вход подается имя файла.
В первой строке входного файла записаны два целых числа: N – общее количество грузов и M – грузоподъёмность грузовика в кг. Каждая из следующих N строк содержит одно целое число – массу груза в кг. . 

Запишите в ответе два числа:максимально возможное количество грузов, затем их общую массу. Числа записываются через пробел.

 
Алгоритм решения
  1. Ввод данных
  2. Обработка
  3. Вывод результатов
Реализуем 1 этап, считая, что данные в файле '26-tr303.txt'
На этапе считывания можно разбить все грузы на две партии (Gr200 - от 180 до 200 и Gr - остальные, списки проще создать в основной программе)
На этепе 2 : сортируем Gr200 по убыванию, Gr по возрастанию 
Вначале набираем из 1-го, затем из 2-го 
 


Видим, что gr200 можно поместить весь,, но сделаем всё "честно" angel


Предложенные способы НЕЛЬЗЯ считать эффективными, но для экзамена подходять как ЭЛЕМЕНТАРНЫЕ enlightened
Прикрепленные файлы
26-tr301.txt
26-tr303.txt
26_2614.txt
Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать