Задание 26 ЕГЭ по информатике — Целочисленная обработка с сортировкой (рейтинг)
Разбор номера «Целочисленная обработка с сортировкой (рейтинг)»: как устроено задание, настоящие формулировки из тренажёра с подсказками и официальным решением. Окно практики открывается сразу — без регистрации и онбординга.
Задание 26 (№26 — Целочисленная обработка с сортировкой (рейтинг)) — вопрос первой части экзамена по информатике: короткий ответ, который проверяется автоматически. Ниже — реальные формулировки из тренажёра с подсказками и разбором; проверка работает прямо на этой странице.
Окно примера ниже — то же, что на сайте: подсказки по одной, автопроверка ответа и разбор.
Примеры задания 26
№ 26Пример 1краткий ответ★★★★★1 первичный балл
При проведении эксперимента заряженные частицы попадают на чувствительный экран, представляющий из себя матрицу размером 100 000 на 100 000 точек. При попадании каждой частицы на экран в протоколе фиксируются координаты попадания: номер ряда (целое число от 1 до 100 000) и номер позиции в ряду (целое число от 1 до 100 000). Точка экрана, в которую попала хотя бы одна частица, считается светлой, точка, в которую ни одна частица не попала, — тёмной. При анализе результатов эксперимента рассматривают изолированные точки. Точка называется изолированной, если эта точка светлая (независимо от того, сколько частиц в неё попало), а другие светлые точки в том же ряду либо отсутствуют, либо находятся на расстоянии более 1000. Вам необходимо по заданному протоколу определить наибольшее количество изолированных точек, расположенных в одном ряду, и номер ряда, в котором это количество встречается. Если таких рядов несколько, укажите максимально возможный номер. Задание 26 Входные данные. Первая строка входного файла содержит целое число N — общее количество частиц, попавших на экран. Каждая из следующих N строк содержит 2 целых числа: номер ряда и номер позиции в ряду. В ответе запишите…
Подсказка 1. Прочитай, что нужно найти: количество объектов по условию или наибольшее значение критерия при ограничении ресурса.
Подсказка 2. Отсортируй данные по ключу и набирай элементы, пока хватает ресурса или условие выполняется — часто это и есть жадное решение.
Подсказка 3. Соблюдай порядок и формат вывода (сначала одно число, потом второе). Ловушка — сравнивать не тот критерий или забыть критерий при равенстве значений.
Разбор.
Решение. Приведём решение на языке Python. screen=set([tuple(map(int,s.split())) for s in open('26.txt')][1:]) points=sorted(screen) rows={} for x in points: rows[x[0]]=rows.get(x[0],[])+[x[1]] ans=[] for r in rows: k=0 for i in range(len(rows[r])): if (i==0 or rows[r][i]-rows[r][i-1]>1000) and (i==len(rows[r])-1 or rows[r][i+1]-rows[r][i]>1000): k+=1 ans.append((k,r)) ans.sort() print(*ans[-1]) Ответ: 17; 99418.
Ответ.
17 99418
№ 26Пример 2краткий ответ★★★★★1 первичный балл
На грузовом судне необходимо перевезти контейнеры, имеющие одинаковый габарит и разные массы (некоторые контейнеры могут иметь одинаковую массу). Общая масса всех контейнеров превышает грузоподъёмность судна. Количество грузовых мест на судне не меньше количества контейнеров, назначенных к перевозке. Какое максимальное количество контейнеров можно перевезти за один рейс и какова масса самого тяжёлого контейнера среди всех контейнеров, которые можно перевезти за один рейс? Входные данные. Задание 26 В первой строке входного файла находятся два числа: S — грузоподъёмность судна (натуральное число, не превышающее 100 000) и N — количество контейнеров (натуральное число, не превышающее 20 000). В следующих N строках находятся значения масс контейнеров, требующих транспортировки (все числа натуральные, не превышающие 100), каждое в отдельной строке. Выходные данные. Два целых неотрицательных числа: максимальное количество контейнеров, которые можно перевезти за один рейс и масса наиболее тяжёлого из них. Пример входного файла: 100 4 80 30 50 40 При таких исходных данных можно транспортировать за один раз максимум два контейнера. Возможные массы этих двух контейнеров — 30 и 40, 30 и 50…
Подсказка 1. Прочитай, что нужно найти: количество объектов по условию или наибольшее значение критерия при ограничении ресурса.
Подсказка 2. Отсортируй данные по ключу и набирай элементы, пока хватает ресурса или условие выполняется — часто это и есть жадное решение.
Подсказка 3. Соблюдай порядок и формат вывода (сначала одно число, потом второе). Ловушка — сравнивать не тот критерий или забыть критерий при равенстве значений.
Разбор.
Решение. Сначала считаем в массив данные из файла. После этого отсортируем массив в порядке возрастания. Таким образом, последовательно складывая элементы массива с начала и сравнивая сумму с оставшейся грузоподъёмностью, получим максимальное количество контейнеров, которые можно перевезти. Далее, вычитая из найденной суммы наибольшую массу контейнера в текущей последовательности, будем пробовать прибавлять контейнеры с большей массой. Если такой контейнер будет найден, то заменяем значение контейнера с наибольшей массой, который возможно поместить на судно. Приведём решение на языке Pascal. var i, j, t: integer; a: array [1..10000] of integer; s: integer; n: integer; sum: integer; maxi: integer; f: text; begin assign(f,'C:\26.txt'); reset(f); readln(f, s, n); for i := 1 to n do readln(f, a[i]); for i := 1 to n do for j := i + 1 to n do if a[i] > a[j] then begin t := a[i]; a[i] := a[j]; a[j] := t; end; sum := 0; maxi := 1; for i := 1 to n do if sum + a[i] В результате работы данного алгоритма при вводе данных из файла в условии получаем ответ — 1612 90. Ответ: 1612 90. Примечание. Путь к файлу необходимо указать согласно расположению файла на Вашем компьютере. Приведём другое решение на языке Python. f = open('26 (5).txt') data = f.readlines() s = data[0].split() s = int(s[0]) del (data[0]) # первая строка больше не нужна, удаляем ее for i in range(0, len(data)): 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] print(count) zapas = s - summa for i in range(0, len(data)): if data[i] - data[count - 1] Приведём решение Максима Митина (Нижний Новгород) на языке Python. f = open('26.txt') l = f.readline() limit = int(l.split()[0]) n = int(l.split()[1]) a = [int(x) for x in f.readlines()] a.sort() ns = 0 k = 0 for i in a: if ns + i Приведём решение Ильи Крылова на языке Python. s = [i for i in open('26.txt').readlines()] capacity = int(s[0].split()[0]) containers = [int(i) for i in s[1:]] selectedContainers = [] containers = sorted(containers) while (capacity - sum(selectedContainers)) >= containers[0]: selectedContainers.append(containers[0]) containers.pop(0) # Получили массив с максимальным количеством самых легких контейнеров # Теперь нужно определить какой максимальный контейнер может поместиться в последний слот maxLastContainerCapacity = capacity - sum(selectedContainers[:-1]) biggestContainer = max([container for container in containers if container Приведём решение Юрия Красильникова на языке Python. f = open('26.txt') s,n = list(map(int,f.readline().split())) a = sorted([int(x) for x in f]) k = 0 for x in a: if x > s: break s -= x last = x k += 1 s += last m = max([x for x in a if x
Ответ.
1612 90
Как устроена практика в тренажёре
Опыт за каждое решение
Чистое решение без подсказок ценится выше: опыт, уровни и серии растут с каждым заданием, а не за клики.
Ошибки не пропадают
Нерешённое возвращается в работу над ошибками — тренажёр приведёт к заданию снова, пока оно не закроется без помощи.
Прогноз балла
После нескольких решённых номеров тренажёр показывает прогнозный балл и говорит, какие темы подтянуть, чтобы его поднять.
Закрепи задание 26 в тренажёре
Окно практики откроется сразу — без имени и онбординга. Прогресс сохранится, как только укажешь имя.