Напишите программу по тексту в паскале или на си+++ или на питоне пусть дана последовательность чисел a1, : , an, состоящая из 0 и 1. пару чисел (ai, aj), таких что i < j, j - i = k и ai ¹ aj, назовем неправильной. индексом неправильности последовательности (инп) назовем количество неправильных пар (ai, aj) в ней. инп легко посчитать за один проход по массиву, в котором хранятся элементы последовательности: переберем все i от 1 до n - k и сравним их с соответствующими j = i + k. если инп равен 0, то ответ в ok и никаких чисел менять в ней не нужно. иначе для каждого из элементов последовательности найдем инп после изменения этого элемента. при изменении одного числа в последовательности нулей и единиц может измениться только правильность пар (ai-k, aj) и (ai, ai+k), если они, конечно, существуют. дело в том, что i - k может быть меньше 1, или i + k - больше n. в этих случаях соответствующая пара отсутствует. значит в результате изменения одного числа, инп может измениться на -2, -1, 0, +1 или +2. если в результате изменения какого-то из чисел инп станет равным 0 - то ответ ok и номер измененного элемента, иначе - ответ fail. данный алгоритм работает за линейное относительно длины последовательности время.

Maria8812 Maria8812    3   07.10.2019 07:00    3

Другие вопросы по теме Информатика