Задание 27 ЕГЭ по информатике · FD2DE1

Программа и описание алгоритмаВысокаяКЭС 3.2КЭС 3.3
На вход программы поступает последовательность из N целых положительных чисел, все числа в последовательности различны. Рассматриваются все пары различных элементов последовательности, находящихся на расстоянии не меньше чем 5 (разница в индексах элементов пары должна быть 5 или более, порядок элементов в паре неважен). Необходимо определить количество таких пар, для которых произведение элементов делится на 11.
В первой строке входных данных задаётся количество чисел N (5≤N≤1000). В каждой из последующих N строк записано одно целое положительное число, не превышающее 10 000.
В качестве результата программа должна вывести одно число: количество пар элементов, находящихся в последовательности на расстоянии не меньше чем 5, в которых произведение элементов кратно 11.
Пример входных данных:
8
22
2
3
5
4
6
7
11
Пример выходных данных для приведённого выше примера входных данных:
5
Пояснение. Из восьми заданных элементов с учётом допустимых расстояний между ними можно составить 6 произведений: 22⋅6, 22⋅7, 22⋅11, 2⋅7, 2⋅11, 3⋅11. Из них на 11 делятся 5 произведений.
Требуется написать эффективную по времени и памяти программу для решения описанной задачи. Программа считается эффективной по времени, если при увеличении количества исходных чисел N в k раз время работы программы увеличивается не более чем в k раз. Программа считается эффективной по памяти, если память, необходимая для хранения всех переменных программы, не превышает 1 килобайта и не увеличивается с ростом N.
Перед текстом программы обязательно кратко опишите алгоритм решения. Укажите использованный язык программирования и его версию.

Развёрнутый ответ: проверяется по критериям ФИПИ.

Подсказки (3)
  1. При каких условиях произведение двух чисел делится на 11?
  2. Достаточно хранить количество ранее встреченных чисел, кратных 11. Для текущего числа учитывайте только элементы, расположенные не ближе чем на 5 позиций слева.
  3. Поддерживайте отложенное добавление: перед обработкой элемента с индексом i добавляйте в счётчик признак элемента с индексом i−5. Если текущий элемент кратен 11, к ответу прибавляется число всех уже добавленных кратных 11; иначе к ответу прибавляется число добавленных элементов, не кратных 11.
Решение
1. Произведение двух целых чисел делится на 11, если хотя бы один из множителей делится на 11, поскольку 11 является простым числом.

2. Нельзя хранить всю последовательность. Будем обрабатывать числа последовательно и хранить только количество элементов, которые уже разрешено использовать в паре с текущим элементом. Для позиции i разрешены позиции не более i−5, поэтому перед обработкой текущего числа добавляется элемент с индексом i−5.

3. Храним два счётчика: количество разрешённых элементов, кратных 11, и количество разрешённых элементов, не кратных 11. Если текущее число кратно 11, оно образует подходящую пару с каждым разрешённым элементом. Иначе оно образует подходящую пару только с разрешёнными элементами, кратными 11.

4. Для ограничения памяти достаточно хранить последние пять чисел в циклическом буфере. Каждый элемент добавляется в счётчики ровно один раз и обрабатывается ровно один раз, поэтому время работы имеет сложность O(N), а дополнительная память — O(1).

5. Программа на Python 3.11:

6. from collections import deque n = int(input()) window = deque() count_div11 = 0 count_other = 0 answer = 0 for i in range(n):
x = int(input()) if len(window) == 5:
old = window.popleft() if old % 11 == 0:
count_div11 += 1 else:
count_other += 1 if x % 11 == 0:
answer += count_div11 + count_other else:
answer += count_div11 window.append(x) print(answer)
Частые ошибки
  • Учитывают элементы на расстоянии менее 5.
  • Считают произведение кратным 11 только тогда, когда оба множителя кратны 11.
  • Добавляют текущий элемент в счётчики до подсчёта пар, из-за чего он может образовать пару сам с собой.
  • Хранят всю последовательность и тем самым нарушают требование по памяти.
  • Используют двойной цикл и получают сложность $O(N^2)$.

Источник: Открытый банк ФИПИ

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

27На вход программе подаются сведения о пассажирах, сдавших свой багаж в камеру хранения. В первой строке…Программа и описание алгоритма · E9F6D627Рассматриваются все пары различных элементов последовательности, находящихся на расстоянии не меньше чем 3…Программа и описание алгоритма · ED6EB927Рассматриваются все пары различных элементов последовательности: элементы пары могут быть расположены в…Программа и описание алгоритма · F9556D27Рассматриваются все пары различных элементов последовательности: элементы пары не обязаны стоять рядом…Программа и описание алгоритма · FB72C927Дана последовательность N целых положительных чисел. Рассматриваются все пары элементов последовательности…Программа и описание алгоритма · 04D7CD27Дана последовательность N целых положительных чисел. Рассматриваются все пары элементов последовательности…Программа и описание алгоритма · 0B12A6

Нужен репетитор по информатике?

Посмотрите репетиторов, которые ведут занятия в Precettore, или оставьте заявку — подберём сами.

Репетиторы по информатике

Подбор репетитора

Напишите, что нужно, — команда Precettore подберёт репетитора и свяжется с вами.

Готовьтесь к ЕГЭ по информатике в Precettore

Варианты с автопроверкой, домашние задания от репетитора, онлайн-доска и разбор ошибок — в одном кабинете. Регистрация бесплатная.