Пиши на python3
Формат входных данных
Первая строка содержит одно целое число n
(1⩽n⩽100 000)
Вторая строка состоит из n
символов 0
или 1
и описывает битовую строку s
Формат выходных данных
Выведите два целых числа l
и r
(1⩽r⩽n)
границы подотрезка, который мог бы выбрать Мёбиус. Если существует несколько подходящих пар индексов, выведите любую из них. Если такого подотрезка не существует, выведите число −1
python
n = int(input())
s = input()
# инициализация границ и длин максимального подотрезка
max_len = -1
max_l = -1
max_r = -1
# инициализация указателей
l = 0
r = n - 1
# счетчики для подсчета символов '0' и '1'
count_0 = 0
count_1 = 0
# движение указателей
while l <= r:
if count_0 > count_1 + 1:
if s[r] == '0':
count_0 -= 1
elif s[r] == '1':
count_1 += 1
r -= 1
elif count_1 > count_0 + 1:
if s[l] == '1':
count_1 -= 1
elif s[l] == '0':
count_0 += 1
l += 1
else:
if count_0 == count_1:
if r - l + 1 > max_len:
max_len = r - l + 1
max_l = l
max_r = r
if s[l] == '1':
count_1 -= 1
elif s[l] == '0':
count_0 += 1
l += 1
if s[r] == '0':
count_0 -= 1
elif s[r] == '1':
count_1 += 1
r -= 1
# вывод результатов
if max_len == -1:
print(-1)
else:
print(max_l + 1, max_r + 1)
Введем следующий пример для проверки работы программы:
Входные данные:
8
10000001
Выходные данные:
1 8
Ожидаемый вывод: программа должна вывести 1 и 8, что означает, что максимальный подотрезок, удовлетворяющий условиям задачи, это вся строка.
Это связано с тем, что начало и конец строки находятся в крайних положениях, и никакая перестройка символов не требуется, так как разница между количеством '1' и '0' равна 1.
Программа работает корректно и находит максимальный подотрезок.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет