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

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

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

Подсказки (3)
  1. При каких условиях произведение двух чисел делится на простое число 29?
  2. Для каждого текущего элемента учитывайте только элементы, расположенные левее хотя бы на 4 позиции. Достаточно хранить количество ранее встреченных чисел, кратных 29.
  3. При чтении элемента с индексом i добавьте к ответу количество подходящих элементов среди позиций не больше i−4. Поддерживайте это количество с задержкой в четыре позиции и обновляйте его, если добавляемое число кратно 29.
Решение
1. Так как 29 — простое число, произведение двух целых чисел делится на 29 тогда и только тогда, когда хотя бы один из множителей делится на 29.
29∣(a⋅b)⟺29∣a  или  29∣b

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

3. Чтобы не хранить всю последовательность, используем очередь из последних четырёх чисел. Перед обработкой текущего элемента число, вышедшее из очереди, становится допустимым для всех последующих элементов и добавляется в счётчик, если оно кратно 29.

4. Если текущее число кратно 29, оно образует пару с каждым допустимым ранее числом. Если оно не кратно 29, пара будет кратна 29 только с допустимым ранее числом, кратным 29. Поэтому к ответу добавляется текущий счётчик, если текущее число кратно 29, а иначе добавляется 0.

5. Алгоритм работает за время O(N) и использует O(1) дополнительной памяти. Пример программы на Python 3:

6. from collections import deque n = int(input()) last_four = deque() count29 = 0 answer = 0 for _ in range(n):
x = int(input()) if len(last_four) == 4:
old = last_four.popleft() if old % 29 == 0:
count29 += 1 if x % 29 == 0:
answer += count29 last_four.append(x) print(answer)
Частые ошибки
  • Проверять все пары и получать квадратичную сложность $O(N^2)$.
  • Считать допустимыми элементы, находящиеся на расстоянии 3.
  • Забыть, что произведение кратно 29, если хотя бы один множитель кратен 29.
  • Добавлять в счётчик текущий элемент до проверки пар с ним.
  • Хранить всю последовательность, нарушая требование о постоянном объёме памяти.

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

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

27Рассматриваются все пары различных элементов последовательности, находящихся на расстоянии не меньше чем 4…Программа и описание алгоритма · 233FD127Дана последовательность N целых положительных чисел. Рассматриваются все пары элементов последовательности…Программа и описание алгоритма · 26775227Дана последовательность N целых положительных чисел. Рассматриваются все пары элементов последовательности…Программа и описание алгоритма · 2931D927Рассматриваются все пары различных элементов последовательности, находящихся на расстоянии не меньше чем 3…Программа и описание алгоритма · 29FE8627Дана последовательность N целых положительных чисел. Рассматриваются все пары элементов последовательности…Программа и описание алгоритма · 335BFF27Рассматриваются все пары различных элементов последовательности, находящихся на расстоянии не меньше чем 4…Программа и описание алгоритма · 37B02227На спутнике «Восход» установлен прибор, предназначенный для измерения солнечной активности. В течение времени…Программа и описание алгоритма · 39143827Рассматриваются все пары различных элементов последовательности: элементы пары не обязаны стоять в…Программа и описание алгоритма · 559E69

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

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

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

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

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

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

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