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

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

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

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

2. Числа обрабатываются слева направо. Храним только четыре счётчика: количество просмотренных чётных чисел e, количество чисел, кратных 5, f, количество чисел, кратных 10, b, и уже найденное количество подходящих пар ans.

3. Если очередное число чётное, оно образует подходящую пару с каждым предыдущим числом, кратным 5, кроме предыдущих чисел, кратных 10: такие числа уже имеют оба нужных свойства, и их пары следует учитывать отдельно.

4. Если очередное число кратно 5, оно образует подходящую пару с каждым предыдущим чётным числом, не кратным 10. Если число одновременно кратно 2 и 5, то при добавлении двух вкладов пары с предыдущими числами, кратными 10, нужно добавить только один раз.

5. Удобная единая формула для очередного числа: если оно чётное и не кратно 5, добавить f−b; если оно кратно 5 и не чётное, добавить e−b; если оно кратно 10, добавить e+f−b. После этого обновить соответствующие счётчики.

6. Каждое число обрабатывается один раз, поэтому время работы имеет сложность O(N), а используются только несколько целочисленных переменных, поэтому дополнительная память имеет сложность O(1).

7. Пример реализации на Python 3:

8. Код:
e = f = b = ans = 0
n = int(input())
for _ in range(n):
x = int(input())
even = x % 2 == 0
five = x % 5 == 0

if even and five:
ans += e + f - b
elif even:
ans += f - b
elif five:
ans += e - b

if even:
e += 1
if five:
f += 1
if even and five:
b += 1

print(ans)
Частые ошибки
  • Сохранять всю последовательность, из-за чего память зависит от $N$.
  • Перебирать все пары и получать сложность $O(N^2)$.
  • Для числа, кратного $10$, дважды учитывать пары с предыдущими числами, кратными $10$.
  • Не исключать случай, когда один и тот же элемент одновременно является чётным и кратен $5$.

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

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

27На вход программе подаются строчные английские буквы. Ввод этих символов заканчивается точкой (другие…Программа и описание алгоритма · C0417927Рассматриваются все пары различных элементов последовательности: элементы пары не обязаны стоять рядом…Программа и описание алгоритма · E3E82427На вход программе подаются сведения о пассажирах, сдавших свой багаж в камеру хранения. В первой строке…Программа и описание алгоритма · E9F6D627Рассматриваются все пары различных элементов последовательности, находящихся на расстоянии не меньше чем 3…Программа и описание алгоритма · ED6EB927Рассматриваются все пары различных элементов последовательности: элементы пары не обязаны стоять рядом…Программа и описание алгоритма · FB72C927Рассматриваются все пары различных элементов последовательности, находящихся на расстоянии не меньше чем 5…Программа и описание алгоритма · FD2DE1

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

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

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

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

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

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

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