Тема 26. Обработка целочисленной информации с использованием сортировки
26.03 Перевоз грузов
Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела обработка целочисленной информации с использованием сортировки
Решаем задачи

Ошибка.
Попробуйте повторить позже

Задача 1#49390

Для перевозки партии грузов различной массы выделен грузовик, но его грузоподъёмность ограничена, поэтому перевезти сразу все грузы не удастся. Грузы массой от 180 до 200 кг грузят в первую очередь, выбирая грузы по убыванию массы, начиная с самого тяжёлого. На оставшееся после этого место стараются взять как можно большее количество грузов. Если это можно сделать несколькими способами, выбирают тот способ, при котором самый большой из выбранных грузов имеет наибольшую массу. Если и при этом условии возможно несколько вариантов, выбирается тот, при котором наибольшую массу имеет второй по величине груз, и т.д. Известны количество грузов, масса каждого из них и грузоподъёмность грузовика. Необходимо определить количество и общую массу грузов, которые будут вывезены при погрузке по вышеописанным правилам. Входные данные представлены в файле 26.txt следующим образом. В первой строке входного файла записаны два целых числа: N  – общее количество грузов и M  – грузоподъёмность грузовика в кг. Каждая из следующих N  строк содержит одно целое число – массу груза в кг. В ответе запишите два целых числа без пробела: сначала максимально возможное количество грузов, затем их общую массу.

Пример организации исходных данных во входном файле:

6 700

100

185

120

160

140

300

В данном случае сначала нужно взять груз массой 185 кг. Остается 515 кг. После этого можно вывезти ещё максимум 3 груза. Это можно сделать четырьмя способами: 100 + 120 + 140, 100 + 140 + 160, 100 + 120 + 160, 120 + 140 + 160. Выбираем способ, при котором вывозится груз наибольшей возможной массы. Таких способов три: 100 + 120 + 160, 100 + 140 + 160, 120 + 140 + 160. Из этих способов выбираем те, при которых больше масса второго по величине груза, то есть 100 + 140 + 160 и 120 + 140 + 160. Их них нужно выбрать вариант 120 + 140 + 160, так как в этом случае третий по величине груз наиболее тяжёлый. Всего получается 4 груза общей массой 605 кг.

Вложения к задаче
Показать ответ и решение

Грузоподъемность грузовика — 10000 кг.

Скопируем все данные в Exel, после этого удалим первую строку с количеством грузов и общей грузоподъемностью.

Отсортируем данные по возрастанию. Сначала нужно взять грузы массой от 180 до 200 кг. Таких грузов 16 (диапазон А154:А169) общей массой 3018 кг. Тогда остается еще 10000 − 3018 = 6982  кг.

Теперь мы можем вывезти максимум 102 груза(считаем самые маленькие в диапазоне А1:А102). Первые 101 груз составят 6776 кг, тогда на 102-ой груз останется 6982− 6776 = 206  кг. Груз такой массы есть в таблице, тогда, берем его. Значит, грузовик наполнен по максимуму, удалось поместить все 10000 кг.

Тогда всего получается 16 + 102 = 118  грузов общей массой 10000кг.

Ответ: 11810000

Ответ: 11810000

Ошибка.
Попробуйте повторить позже

Задача 2#87932

Городская почта каждый день готовит к отправке письма и посылки. Объём кузова грузовика, на котором повезут посылки, известен, и он меньше, чем объём всех посылок. По заданной информации об объёме посылок и кузова определите максимальное количество посылок, которое может быть перевезено за два раза, а также максимально возможный размер посылки, при условии, что требуется перевезти наибольшее возможное количество посылок.

Входные данные

В первой строке входного файла находятся два числа: K — размер свободного места (объём) в кузове грузовика (натуральное число, не превышающее 1000000) и N – количество посылок, которые надо перевезти (натуральное число, не превышающее 10000). В следующих N строках находятся значения объёмов указанных посылок (все числа натуральные, не превышающие 1000), каждое в отдельной строке.

Выходные данные

Запишите в ответе два числа: сначала наибольшее число посылок, которые могут быть перевезены за два раза, затем максимальный размер посылки, при условии, что нужно перевезти наибольшее возможное количество посылок. Если вариантов комплектации несколько, выберите тот, при котором будет доставлена посылка наибольшего объёма.

Вложения к задаче
Показать ответ и решение

Откроем файл в Excel. Удаляем первую строку, предварительно запомнив значения в ней: 270000 и 10000. Сортируем столбец А в порядке возрастания.

Выделяем ячейку А1 и протягиваем вниз таблицы до тех пор пока снизу значение не приблизиться к значение 270000. Ближайшее такое число – 269961. Количество грузов при этом – 2295.

Так как остается при первой погрузке 39 кг для полного заполнения кузова, то заменим один груз весом 236 кг на груз весом 275 кг. Удалим все отвезенные в первый раз грузы.

Аналогично первому проходу снова выделяем ячейки в столбце А до тех пор пока не приблизимся к число 270000, получаем ближайшее значение: 269783 и количество грузов: 949.

У нас остается ещё 217 кг свободного пространства, поэтому заменим значение 332 кг на 549 кг.

Получаем количество посылок: 2295+ 949 = 3244  и максимальный размер посылки: 549.

Ответ: 3244 549

Ошибка.
Попробуйте повторить позже

Задача 3#87930

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

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

Вложения к задаче
Показать ответ и решение

Откроем файл в Excel. Удаляем первую строку, предварительно запомнив значения в ней: 4000 и 18000. Сортируем столбец А в порядке возрастания.

Ищем грузы от 101 до 179 кг включительно, копируем их и вставляем в столбец C, при этом удаляем их из столбца А. Их масса равна 32001.

Посчитаем, сколько грузоподъемности у нас останется после набора выбранных грузов: 180000− 32001 = 147999  кг – оставшаяся грузоподъемность.

На оставшиеся места возьмем наименьшие по массе грузы. В ячейку B1 копируем значение из ячейки А1. В ячейку В2 записываем формулу: =В1+А2 и растягиваем вниз до конца таблицы.

Проходимся по столбцу В и ищем значение, максимально приближенное к 147999. Это значение – 147696. До полного заполнения грузовика остается 147999 − 147696 = 303  кг. Значит, нам выгодно взять груз не 366 кг, а 669. Такой груз присутствует в списке, значит число 669 будет ответом на второй вопрос.

Так как грузовик полностью забит, то масса всех грузов: 180000.

Ответ: 180000 669

Ошибка.
Попробуйте повторить позже

Задача 4#63845

На складе лежат канистры с бензином различного объема и стоимости. Объем и стоимость записаны на каждой канистре как натуральные числа: объем не превосходит 100, стоимость не превосходит 1000. Для транспортировки отбираются K канистр с самой низкой ценой бензина за единицу объема; при равной стоимости за единицу оьъема выбираются канистры с большим объемом.

По заданной информации о канситрах с бензином и количестве транспортируемых канистр определите суммарный объем нефти в отправленных канистрах и стоимость самого большой отправленнй канистры.

Входные данные: в первой строке через пробел записаны числа N – количество канистр на складе (натуральное число, не превышающее 1000) и K – количество канистр на отправку (натуральное число, не превосходящее 100). В каждой из последующих N строк через пробел записаны два числа – объем и стоимость каждой канистры.

Запишите в ответе два числа через пробел – сначала суммарный объем бензина в отправленных канистрах, затем стоимость самой большой отправленной канистры.

Пример организации исходных данных во входном файле:

10 4

47 470

50 600

60 480

45 540

30 300

15 180

70 560

30 360

91 910

40 320

Ответ для данного примера: 261 910

Вложения к задаче
Показать ответ и решение

Перенесем данные в Excel. Затем необходимо удалить первую строку, так как в ней содержится информация о количестве всех канистр и количестве отгружаемых, а нам требуется только информация о самих канистрах.

Так как первый критерий отбора канистры для отгрузки это цена за единицу объема, то сначала ее необходимо найти. Для этого в ячейку C1 запишем формулу: =B1/A1.

Теперь нужно отсортировать все канистры так, как требует этого задание. Для этого заходим в пользовательскую сортировку, выбираем первым критерием сортировки столбец C, по возрастнию, а вторым критерием столбец A, по убыванию.

После сортировки необходимо найти сумму по столбцу A для первых 45 строк, сделать это можно с помощью формулы: =СУММ(A1:A45).

И остается только найти канистру с максимальным объемом из этого диапазона и определить ее стоймость. Первое можно сделать с помощью функции МАКС, а второе с помощью фильтра по найденному значению.

Ответ: 3154 658

Ошибка.
Попробуйте повторить позже

Задача 5#63366

На судне необходимо перевезти ящики, имеющие одинаковый габарит и разные массы. Общая масса всех ящиков превышает грузоподъёмность судна. Количество грузовых мест на судне не меньше количества ящиков, назначенных к перевозке. Определите минимальное количество ящиков, которое может остаться после погрузки, и их наибольшую возможную суммарную массу.

Входные данные. В первой строке входного файла находятся два числа: S – грузоподъёмность судна (натуральное число, не превышающее 100 000) и N – количество ящиков. В следующих N строках находятся значения масс ящиков, требующих транспортировки (все числа натуральные, не превышающие 100), каждое в отдельной строке.

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

Вложения к задаче
Показать ответ и решение

Открываем программу Excel и загружаем в неё наш файл. Сортируем столбец А во возрастанию. В столбце В начинаем суммировать значения масс. Для этого в ячейку B1 помещаем значение ячейки A1, а в ячейку B2 помещаем формулу: = B1 + A2  и растягиваем её вниз. Ищем значение суммы, которое близко к значению грузоподъемности судна. Оно находится в строке 2209. Значит, погрузить мы можем 2209 контейнеров и остаются непогруженными 9864− 2209 = 7655  .

Так как мы сортировали данные по возрастанию, то у нас остались максимально возможные грузы. Поэтому, чтобы найти максимально возможную суммарную массу, необходимо просуммировать значения ячеек A2210 : A9864  . Эта сумма равна 542450.

Ответ: 7655 542450

Ошибка.
Попробуйте повторить позже

Задача 6#57348

Для перевозки партии грузов различной массы выделен грузовик, но его грузоподъёмность ограничена, поэтому перевезти сразу все грузы не удастся. Грузы массой от 160 до 195 кг включительно грузят в первую очередь, выбирая грузы по убыванию массы, начиная с самого тяжёлого. На оставшееся после этого место стараются взять как можно большее количество грузов. Если это можно сделать несколькими способами, выбирают тот способ, при котором самый большой из выбранных грузов имеет наибольшую массу. Если и при этом условии возможно несколько вариантов, выбирается тот, при котором наибольшую массу имеет второй по величине груз, и т.д. Известны количество грузов, масса каждого из них и грузоподъёмность грузовика. Необходимо определить количество и общую массу грузов, которые будут вывезены при погрузке по вышеописанным правилам.
Входные данные представлены в файле 26_9.txt следующим образом. В первой строке входного файла записаны два целых числа: N – общее количество грузов и M – грузоподъёмность грузовика в кг. Каждая из следующих N строк содержит одно целое число – массу груза в кг. В ответе запишите два целых числа без пробела: сначала максимально возможное количество грузов, затем разницу между их общей массой и грузоподъемностью грузовика.
Пример организации исходных данных во входном файле:
6 900
80
170
215
160
180
300
В данном случае сначала нужно взять груз массой 160, 170 и 180 кг. Остается 390 кг. После этого можно вывезти ещё максимум 2 груза. Это можно сделать двумя способами: 80 + 300, 80+215. Выбираем способ, при котором вывозится груз наибольшей возможной массы. Такой способ один: 80 +300. Всего получается 5 грузов общей массой 890 кг, тогда разница составляет 900-890 = 10 кг.Ответ: 5 10.

Вложения к задаче
Показать ответ и решение

Грузоподъемность грузовика — 13300 кг.

Отсортируем данные по возрастанию. Сначала нужно взять грузы массой от 160 до 195 кг. Таких грузов 29 (диапазон А139:А167) общей массой 5139 кг. Тогда остается еще 8161кг.

Теперь мы можем вывезти еще максимум 111 грузов (считаем самые маленькие в диапазоне А1:А111). Первые 110 грузов составят 7967 кг, тогда на 111-ый груз останется 194 кг.

Такого груза нет в таблице, поэтому берем ближайший к этому числу (меньше его) груз — 159 кг. Теперь нужно выбрать второй наибольший груз, на него остается 35+136= 171 кг(35 — это разница между 194 и 159, то есть свободное место, 136 — ячейка А110). Такого груза в таблице нет, поэтому берем ближайший к этому числу (меньше его) груз — 157 кг.

Теперь нужно выбрать третий наибольший груз, на него остается 14+136= 150 кг(14 — это разница между 171 и 157, то есть свободное место, 136 — ячейка А109). Такого груза в таблице нет, поэтому берем ближайший к этому числу (меньше его) груз — 149 кг.

Теперь нужно выбрать четвертый наибольший груз, на него остается 1+133= 134 кг(1 — это разница между 151 и 151, то есть свободное место, 134 — ячейка А108). Такого груза в таблице нет, ближайший к нему это как раз груз с массой 133 из ячейки А108.

Значит, грузовик наполнен по максимуму, удалось поместить все 13299 кг. Тогда разница между общей массой и грузоподъемностью грузовика равна 1.

Тогда всего получается 140 грузов с разницей в общей массе и грузоподъемностью 1 кг.

Ответ: 1401

Ошибка.
Попробуйте повторить позже

Задача 7#57201

Для перевозки партии грузов различной массы выделен грузовик, но его грузоподъёмность ограничена, поэтому перевезти сразу все грузы не удастся. Грузы массой от 200 до 230 кг включительно грузят в первую очередь, выбирая грузы по убыванию массы, начиная с самого тяжёлого. На оставшееся после этого место стараются взять как можно большее количество грузов. Если это можно сделать несколькими способами, выбирают тот способ, при котором самый большой из выбранных грузов имеет наибольшую массу. Если и при этом условии возможно несколько вариантов, выбирается тот, при котором наибольшую массу имеет второй по величине груз, и т.д. Известны количество грузов, масса каждого из них и грузоподъёмность грузовика. Необходимо определить количество и общую массу грузов, которые будут вывезены при погрузке по вышеописанным правилам.
Входные данные представлены в файле 26_2.txt следующим образом. В первой строке входного файла записаны два целых числа: N – общее количество грузов и M – грузоподъёмность грузовика в кг. Каждая из следующих N строк содержит одно целое число – массу груза в кг. В ответе запишите два целых числа через пробел: сначала максимально возможное количество грузов, затем их общую массу.
Пример организации исходных данных во входном файле:
6 900
100
210
215
160
240
300
В данном случае сначала нужно взять груз массой 210 и 215 кг. Остается 475 кг. После этого можно вывезти ещё максимум 2 груза. Это можно сделать пятью способами: 100 + 160, 100 + 240, 100+300, 160 + 240, 160+300. Выбираем способ, при котором вывозится груз наибольшей возможной массы. Таких способов два: 100 +300, 160+300. Из этих способов выбираем тот, при котором больше масса второго по величине груза, то есть 160+300. Всего получается 4 груза общей массой 885 кг. Ответ: 4 885.

Вложения к задаче
Показать ответ и решение

Отсортируем данные по возрастанию. Сначала нужно взять грузы массой от 200 до 230кг. Таких грузов 32 (диапазон А170:А201) общей массой 6888кг. Тогда остается еще 4612кг.

Теперь мы можем вывезти максимум 82 груза(считаем самые маленькие в диапазоне А1:А82). Первые 81 груза составят 4421кг, тогда на 82 груз останется 191кг. Такой груз есть в таблице, поэтому 82 груза составят ровно 4612кг.

Тогда всего получается 114 грузов общей массой 11500кг.

Ответ: 114 11500

Ошибка.
Попробуйте повторить позже

Задача 8#56665

Задание выполняется с использованием прилагаемых файлов

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

Входные данные

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

Выходные данные

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

Пример организации исходных данных во входном файле:

6 720

100

315

120

160

140

300

В данном случае сначала нужно взять груз массой 315 кг. Остается 405 кг. После этого можно вывезти ещё максимум 3 груза. Это можно сделать тремя способами: 100 + 120 + 140, 100 + 140 + 160, 100 + 120 + 160. Выбираем способ, при котором вывозится груз наибольшей возможной массы. Таких способов два: 100 + 120 + 160, 100 + 140 + 160. Из этих способов выбираем тот, при котором больше масса второго по величине груза, то есть 100 + 140 + 160. Всего получается 4 груза общей массой 715 кг. Ответ: 4 715.

Вложения к задаче
Показать ответ и решение

Решение 1 ( Excel / LibreOffice):
Сначала откроем текстовый документ, скопируем значения и перенесем их в Excel или LibreOffice. Для удобства числовые значения количества грузов и грузоподъёмность грузовика (8310  , 130311  ) подвинем правее в ячейки E1  и F1  . Сортируем данные столбца A  ( Сортировка и фильтр Сортировка по возрастанию). Находим первый груз размером 310  и начинаем набирать, пока не получим в правом нижнем углу максимальную сумму, не превышающую 130311  . Мы собрали 351  груз массой 110566  . У нас остается 19745  кг (130311− 110566  ) свободного места. Используем жадный алгоритм: чтобы вывезти максимальное количество грузов, необходимо брать грузы с наименьшей массой до тех пор, пока их суммарная масса меньше грузоподъемности. Поэтому переходим в самый верх и начинаем набирать максимальную массу, не превышающую 19745  . Выходит, что мы можем взять 192  груза массой 19646  кг. Заменяем груз весом 105  на груз весом 204  , так как займем больше места. Выходит, что мы заняли всё место, значит, сумма равна 130311  , а количество 351+ 192 = 543  .

Решение 2 (Python):

file = open("Задание_26__i0ia.txt")
lines = file.readlines()

n, m = map(int, lines[0].split())
array = list(map(int, lines[1:]))
array = sorted(array)

i = 0
current_sum = 0
last_elem = 0
ind_last = 0
count = 0

while array[i] <= 320:
    if array[i] >= 310 and current_sum + array[i] <= m:
        current_sum += array[i]
        last_elem = array[i]
        count += 1
    else:
        ind_last = i
    i += 1

for j in range(ind_last):
    if current_sum + array[j] <= m:
        current_sum += array[j]
        last_elem = array[j]
        count += 1

for j in range(i, len(array)):
    if current_sum + array[j] <= m:
        current_sum += array[j]
        last_elem = array[j]
        count += 1

free_space = m - current_sum + last_elem

for i in range(len(array) - 1, 0, -1):
    if array[i] <= free_space:
                                                                                                     
                                                                                                     
        current_sum += array[i] - last_elem
        break

print(count, current_sum)

Ответ: 543 130311

Ошибка.
Попробуйте повторить позже

Задача 9#55485

Для перевозки партии грузов различной массы выделен грузовик, но его грузоподъёмность ограничена, поэтому перевезти сразу все грузы не удастся. Грузы массой от 250 до 275 кг включительно грузят в первую очередь, выбирая грузы по убыванию массы, начиная с самого тяжёлого. На оставшееся после этого место стараются взять как можно большее количество грузов. Если это можно сделать несколькими способами, выбирают тот способ, при котором самый большой из выбранных грузов имеет наибольшую массу. Если и при этом условии возможно несколько вариантов, выбирается тот, при котором наибольшую массу имеет второй по величине груз, и т.д. Известны количество грузов, масса каждого из них и грузоподъёмность грузовика. Необходимо определить количество и общую массу грузов, которые будут вывезены при погрузке по вышеописанным правилам.
Входные данные представлены в файле 3.txt следующим образом. В первой строке входного файла записаны два целых числа: N – общее количество грузов и M – грузоподъёмность грузовика в кг. Каждая из следующих N строк содержит одно целое число – массу груза в кг. В ответе запишите два целых числа без пробела: сначала максимально возможное количество грузов, затем их общую массу.
Пример организации исходных данных во входном файле:
6 700
100
185
120
160
140
300
В данном случае сначала нужно взять груз массой 185 кг. Остается 515 кг. После этого можно вывезти ещё максимум 3 груза. Это можно сделать четырьмя способами: 100 + 120 + 140, 100 + 140 + 160, 100 + 120 + 160, 120 + 140 + 160. Выбираем способ, при котором вывозится груз наибольшей возможной массы. Таких способов три: 100 + 120 + 160, 100 + 140 + 160, 120 + 140 + 160. Из этих способов выбираем те, при которых больше масса второго по величине груза, то есть 100 + 140 + 160 и 120 + 140 + 160. Их них нужно выбрать вариант 120 + 140 + 160, так как в этом случае третий по величине груз наиболее тяжёлый. Всего получается 4 груза общей массой 605 кг. Ответ: 4 605.

Вложения к задаче
Показать ответ и решение

Открываем Excel и вставляем данные из файла. Удаляем первую строку, при этом запоминаем, что максимальная грузоподъемность – 12000.

Сортируем столбец А по возрастанию. Находим промежуток со значениями от 250 до 275. Количество таких чисел 30, их сумма 7907. Фиксируем эту информацию где-нибудь в таблице. Удаляем эти значения из списка.

Теперь нам необходимо отобрать максимальное число грузов, поэтому в ячейку B1 копируем значение из ячейки A1, а в ячейку B2 записываем формулу:

=B1+A2

и растягиваем её вниз до конца таблицы. Также где-нибудь в стороне посчитаем запас грузоподъемности: 12000− 7907 = 4093  . Находим в столбце В значение, близкое к 4093, оно равно 4013. То есть условно у нас в запасе остается ещё 80 кг. Заменим какое-нибудь значение из списка, чтобы максимально приблизиться к 12000. Это будет значение 90, так как 90+ 80 = 170  , а значение 170 как раз есть в таблице.

Получаем количество грузов: 30+ 77 = 107  и их вес 7907+ 4093 = 12000  . Ответ: 10712000.

Ответ: 10712000
Рулетка
Вы можете получить скидку в рулетке!