Присоединиться

11 класс·высокий уровень

Предприятие производит оптовую закупку некоторых изделий A и B, на

Условие

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

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

Задание 26Первая строка входного файла содержит два целых числа: N — общее количество партий изделий у поставщика и M — сумма выделенных на закупку денег (в рублях). Каждая из следующих N строк описывает одну партию и содержит два целых числа (цена одного изделия в рублях и количество изделий в партии) и один символ (латинская буква A или B), определяющий тип изделия. Все данные в строках входного файла отделены одним пробелом.В ответе запишите два целых числа: сначала количество закупленных изделий типа B, затем оставшуюся неиспользованной сумму денег.

Пример входного файла:4 100030 8 A50 12 B40 14 A30 60 BВ данном случае сначала нужно купить изделия A: 8 изделий по 30 рублей и 14 изделий по 40 рублей. На это будет потрачено 800 рублей. На оставшиеся 200 рублей можно купить 6 изделий B по 30 рублей. Таким образом, всего будет куплено 6 изделий B и останется 20 рублей. В ответе надо записать числа 6 и 20. Ответ:

Ответ

Ответ и полный разбор откроются после входа

Посмотреть ответ

Решение по шагам

  1. Как рассуждать

    Решение. Создадим два двумерных массива, для партий изделий A и для партий изделий B. Считаем данные из файла в эти массивы, в первую строку массива будем считывать цену изделия в партии, во вторую строку будем считывать количество изделий в партии. Далее отсортируем эти массивы по возрастанию. Сначала найдём, сколько изделий A можно закупить на выделенную сумму, последовательно прибавляя к переменной sum цену изделия в текущей партии. После найдём, сколько изделий B можно закупить на выделенную сумму, последовательно прибавляя к переменной sum цену изделия в текущей партии, также будем накапливать в переменной countSumB количество купленных изделий. Приведём решение на языке PascalABC.var n, m, x, y, t1, t2, countA, countB, i, j: integer; z: string; arrayA: array [1..500,1..2] of integer; arrayB: array [1..500,1..2] of integer; sum, countSumB: integer; f: text;begin assign(f,'C:\26.txt'); reset(f); readln(f, n, m); countA := 0; countB := 0; sum := 0; for i := 1 to m do begin if not eof(f) then readln(f, x, y, z) else break; if z.Contains('A') then begin arrayA[i,1] := x; arrayA[i,2] := y; countA := countA + 1; end; if z.Contains('B') then begin arrayB[i,1] := x; arrayB[i,2] := y; countB := countB + 1; end; end; for i := 1 to n do for j := i + 1 to n do if arrayA[i,1] > arrayA[j,1] then begin t1 := arrayA[i,1]; t2 := arrayA[i,2]; arrayA[i,1] := arrayA[j,1]; arrayA[i,2] := arrayA[j,2]; arrayA[j,1] := t1; arrayA[j,2] := t2; end; for i := 1 to n do for j := i + 1 to n do if arrayB[i,1] > arrayB[j,1] then begin t1 := arrayB[i,1]; t2 := arrayB[i,2]; arrayB[i,1] := arrayB[j,1]; arrayB[i,2] := arrayB[j,2]; arrayB[j,1] := t1; arrayB[j,2] := t2; end; for i := n-countA+1 to n do for j := 1 to arrayA[i,2] do if (sum + arrayA[i,1]) < m then sum := sum + arrayA[i,1] else break; for i := n-countB+1 to n do for j := 1 to arrayB[i,2] do if (sum + arrayB[i,1]) < m then begin sum := sum + arrayB[i,1]; countSumB := countSumB + 1; end else break; writeln(countSumB, ' ', m - sum);end. В результате работы данного алгоритма при вводе данных из файла в условии получаем ответ — 5895

Осталось ещё 1 шаг

  1. Примечание. Путь к файлу необходимо указать…

Получить полное решение

Бесплатно · займёт минуту

Другие задачи по теме «Обработка целочисленной информации»