Формат входных данных
Первая строка содержит одно целое число n
(1⩽n⩽100 000)
Вторая строка состоит из n
символов 0
или 1
и описывает битовую строку s
Формат выходных данных
Выведите два целых числа l
и r
(1⩽r⩽n)
границы подотрезка, который мог бы выбрать Мёбиус. Если существует несколько подходящих пар индексов, выведите любую из них. Если такого подотрезка не существует, выведите число −1
пиши на c++
cpp
#include <iostream>
#include <string>
int main() {
int n;
std::string s;
std::cin >> n;
std::cin >> s;
int left = 0;
int right = 0;
int count = 0;
int max_len = 0;
for (int i = 0; i < n; i++) {
if (s[i] == '0') {
count++;
} else {
count--;
}
if (count == 0) {
int len = i + 1;
if (len > max_len) {
max_len = len;
left = 0;
right = i;
}
}
}
if (max_len == 0) {
std::cout << -1 << std::endl;
} else {
std::cout << left + 1 << " " << right + 1 << std::endl;
}
return 0;
}
В этом коде мы считываем значение n и строку s с помощью std::cin. Затем мы создаем переменные left, right, count и max_len и устанавливаем их значения на 0.
Затем мы проходимся по всем символам строки с помощью цикла for, начиная с нулевого индекса. Внутри цикла мы проверяем текущий символ и увеличиваем или уменьшаем count в зависимости от него. Если count равен 0, значит мы нашли подотрезок, удовлетворяющий условиям задачи. Мы вычисляем его длину (i + 1), сравниваем с max_len и, если длина больше, обновляем max_len и сохраняем значения left и right.
После окончания цикла мы проверяем значение max_len. Если оно равно 0, значит подотрезок не существует, и мы выводим -1. В противном случае, мы выводим значения left и right, увеличенные на 1 (так как вводимые индексы начинаются с 1, а не с 0).
Программа завершается с помощью return 0.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет