Проблема:

У Лайлы есть строка s из строчных английских букв, которую она повторяла бесконечно много раз.

Дано целое число n, найдите и выведите количество букв a в первых n буквах бесконечной строки Лайлы.

Например, если строка s = 'abcac' и n = 10, мы рассматриваем подстроку , abcacabcac первые 10 символов ее бесконечной строки. В подстроке есть 4 вхождения a.

Полную задачу читайте здесь: Повторяющаяся строка

Решение:

Предположим, что sub_str — это входная строка, а str_len — это длина бесконечной строки, которую мы рассматриваем.

Когда str_len меньше длины sub_str, мы можем легко вычислить количество a , перебирая строку.

Теперь, когда str_len больше, чем длина sub_str длины.

Во-первых, мы найдем количество подстрок ( sub_str) в рассматриваемой нами строке.

Во многих случаях размер комбинированных подстрок не кратен str_len, поэтому пропущено несколько символов, и эти символы могут содержать ' a '. Мы должны посчитать эти символы.

Теперь нам нужно найти количество a в sub_str. Пусть count будет хранить количество a в sub_str.

Умножение count на num_sub_str даст нам количество a в комбинированных подстроках, размер которых меньше или равен str_len и кратен размеру sub_str. Но осталось несколько символов, количество которых хранится в remaining_str_len. Мы должны найти вхождение '*a8' в эти символы и увеличить счетчик, если оно найдено.

Реализация C++ на Programmercave

Другие проблемы и решения соревновательного программирования

Выбор чисел
Библиотека Fine

Первоначально опубликовано на https://programmercave0.github.io 24 апреля 2020 г.