Задание 26 ЕГЭ информатика по теме «Обработка целочисленной информации с использованием сортировки»

Дата изменения: 6 мая 2021
На уроке рассмотрен материал для подготовки к ЕГЭ по информатике, разбор 26 задания. Объясняется тема о программной обработке целочисленной информации с использованием алгоритмов сортировки.

ЕГЭ по информатике 26 задание объяснение

26-е задание: «Обработка целочисленной информации с использованием сортировки»
Уровень сложности — высокий,
Требуется использование специализированного программного обеспечения — да,
Максимальный балл — 2,
Примерное время выполнения — 35 минут.
  
Проверяемые элементы содержания: Умение обрабатывать целочисленную информацию с использованием сортировки

Выполнение 26 задания ЕГЭ


26.
26 задание. Демоверсия варианта ЕГЭ по информатике 2021, ФИПИ:
  

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

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

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

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

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

100 4
80
30
50
40

При таких исходных данных можно сохранить файлы максимум двух пользователей. Возможные объёмы этих двух файлов 30 и 40, 30 и 50 или 40 и 50. Наибольший объём файла из перечисленных пар – 50, поэтому ответ для приведённого примера:

2 | 50

Ответ: 568 | 50
✍ Решение:

    Проанализируем возможное решение:

  • Чтобы вычислить максимальное число пользователей, чьи файлы можно сохранить в архиве, необходимо брать файлы с наименьшим объемом , пока суммарный объем этих файлов меньше свободного объема диска. Т.е. для нижеуказанного примера, будем брать 30 + 40. Файл объемом 50 мы взять уже не сможем, так как 70 + 50 = 120, а это уже больше указанного объема диска (100):
  • 100 4
    80
    30
    50
    40
    
  • Таким образом, мы получили первый ответ — максимальное число пользователей, чьи файлы можно сохранить в архиве — ответ 2.
  • Далее необходимо вычислить максимальный размер имеющегося файла, который может быть сохранён в архиве. Для начала вспомним, что у нас оставался «запас» пространства диска при предыдущем расчете. Давайте вычислим этот запас:
  • 100 - 70 = 30
  • Т.е. мы можем добавить 30 наибольшему возможному числу, из выбранных чисел, чтобы полученная сумма не превысила этот запас. Самое большое число из выбранных — это 40 (30, 40):
  • 30 - 40 <= запаса (30)
    40 - 40 <= запаса (30) 
    50 - 40 <= запаса (30) 
    80 - 40 > запаса (30), не подходит
    
  • Таким образом, наибольшее подходящее число — максимальный размер файла — это 50.
  • Теперь построим алгоритм на языках программирования:

    PascalABC.net:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    
    begin
      var f: text;
      assign(f, 'proba.txt');
      reset(f);
      var s, n: integer;
      read(f, s); // 100
      read(f, n);  //4  var (s, n) := ReadInteger2;
      var i := 0;
      var data: array of integer;
      data := new integer[n];
      while not EOF(f) do // 
      begin
        readln(f, data[i]); // var data:= ReadArrInteger(n); 
        i += 1;
      end;
      data.Sort;
      var summa := 0;
      var count := 0;
      for count := 0 to data.Length do
      begin
        if summa + data[count] > s then break;
        summa += data[count];
      end;
      print(count);
      var itog := 0;
      var zapas := s - summa;
      for i := 0 to data.Length do
        if data[i] - data[count - 1] <= zapas then
          itog := data[i] else break;
      print(itog)
    end.
    Python:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    f = open('26.txt')
    data = f.readlines() # массив строк , readlines
     
    s = data[0].split() # ['8200', '970']
    s = int(s[0]) # 8200 - объем св места на диске
    del(data[0]) # первая строка больше не нужна, удаляем ее
    for i in range(0, len(data)): # цикл для преобразование в int
        data[i]=int(data[i])
    data=sorted(data) # сортируем полученный массив для удобства работы
    summa = 0
    for count in range (0,len(data)):
        if summa + data[count] > s: break # если сумма больше - прерываем цикл
        summa += data[count] # формируем сумму, добавляя отсортированные элементы 
    # как только сумма превысила s, произойдёт выход из цикла по оператору break, 
    # а в переменной count останется количество добавленных значений
    print (count) # макс число файлов в архиве
    # вычисляем запас, который мы можем уменьшить с помощью замены одного выбранного значения на другое:
    zapas = s - summa
    # теперь выбираем из массива данных те значения, которые могут быть выбраны: 
    # разность между таким значением и наибольшим выбранным элементом data[count-1] должна быть не больше, чем  zapas:
    for i in range (0,len(data)):
        if data[i] - data[count-1] <= zapas:
            itog = data[i]
    print(itog)  # максимальный размер файла
    С++:

    1
    
     

Ответ: 568 | 50


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

*
*


Вставить формулу как
Блок
Строка
Дополнительные настройки
Цвет формулы
Цвет текста
#333333
Используйте LaTeX для набора формулы
Предпросмотр
\({}\)
Формула не набрана
Вставить