Новая Школа - онлайн-школа подготовки к ЕГЭ
При поддержке
Тренировки Пробники Статистика Карточки Учебник Об экзамене Учительская
  • Тренажёр заданий ЕГЭ
  • Тренажёр ЕГЭ по Информатике
  • Список заданий №26
  • Задание №26
  • Задание №74476 ЕГЭ Информатике

    Условие задания #74476

    №26 по КИМ

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

    1.  Нужно купить как можно больше изделий, независимо от их типа и модификации.

    2.  Если можно разными способами купить максимальное количество изделий, нужно выбрать тот способ, при котором будет куплено как можно больше изделий A.

    3.  Если можно разными способами купить максимальное количество изделий с одинаковым количеством изделий A, нужно выбрать тот способ, при котором вся покупка будет дешевле.

    Определите, сколько всего будет куплено изделий A и какая сумма останется неиспользованной.

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

     

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

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

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

    6 130

    30 B

    50 B

    60 A

    20 A

    70 A

    10 B

    В данном случае можно купить не более 4 изделий, из них не более 2 изделий A. Минимальная цена такой покупки 120 руб. (покупаем изделия 30B, 60A, 20A, 10B). Останется 10 руб. В ответе надо записать числа 2 и 10.

    26 (2).txt

    Ответ

    Ответ:

    157 267

    Решение

    f = open('26.txt')
    n, m = f.readline().split()
    arrayAB = [[0] * 2 for i in range(916)]
    arrayA = [[0] * 2 for i in range(916)]
    n = int(n)
    m = int(m)
    count = 0
    sumi = 0
    for i in range(n):
        x, z = f.readline().split()
        arrayAB[i][0] = int(x)
        if z == 'A':
            arrayAB[i][1] = 0
        if z == 'B':
            arrayAB[i][1] = 1
    arrayAB.sort()
    i = 0
    while m > arrayAB[i][0] + sumi:
        if (sumi + arrayAB[i][0]) < m:
            sumi = sumi + arrayAB[i][0]
            count += 1
        i += 1
    x = 1
    for i in range(count, n):
        if arrayAB[i][1] == 0:
            arrayA[x][0] = arrayAB[i][0]
            arrayA[x][1] = arrayAB[i][1]
            x += 1
    x = 1
    for i in range(count - 1, -1, -1):
        if arrayAB[i][1] == 1:
            if (sumi - arrayAB[i][0] + arrayA[x][0]) > m:
                break
            sumi = sumi - arrayAB[i][0] + arrayA[x][0]
            arrayAB[i][0] = arrayA[x][0]
            arrayAB[i][1] = arrayA[x][1]
            x += 1
    countA = 0
    for i in range(count):
        if arrayAB[i][1] == 0:
            countA = countA + 1
    print(countA, m - sumi)

    Понятно ли решение?

    Похожие задания

    15
    Задание №46720Задание №46721Задание №46752Задание №51424Задание №46719Задание №32183Задание №46642Задание №32179Задание №41214Задание №46643Задание №56108Задание №41209Задание №41208Задание №36692Задание №46645
    Бесплатно

    Решай задачи ЕГЭ в приложении

    Скачивай наш Тренажер ЕГЭ на iPhone или Android и тренируйся в любое время и в любом месте!

    Саша — ассистент в телеграмме