eolymp
bolt
Попробуйте наш новый интерфейс для отправки задач
Задачи

Гарвард

Гарвард

\includegraphics{https://static.e-olymp.com/content/d0/d0258f2cc3a4da1a66073ace138adede1dd185d4.jpg} Термин "Гарвардская архитектура" применима к компьютеру с физически разделенной памятью для инструкций и данных. Термин происходит от имени компьютера Harvard Mark I, созданного в 1944 году. В нем для инструкций использовалась бумажная лента, а для данных --- реле. Некоторые современные микроконтроллеры используют "Гарвардскую архитектуру", но не бумажные ленты и реле! Данные лежат в банках, каждый из которых содержит одинаковое число ячеек. Каждая инструкция обращения к данным имеет байт-смещение \textbf{f} в пределах банка и бит \textbf{a}, который используется для определения номера банка. Если \textbf{a} равно \textbf{0}, то обращение происходит к банку с номером \textbf{0}. Если \textbf{a} равно \textbf{1}, то номер банка хранится в специальном регистре выбора банка (РВБ). Например, пусть у нас есть \textbf{4} банка с \textbf{8} ячейками каждый. Обратиться к ячейке с номером \textbf{5} можно двумя способами: одной инструкцией с \textbf{a} = \textbf{0} и \textbf{f} = \textbf{5} или двумя инструкциями, установив значение РВБ равным \textbf{0} и затем использовав инструкцию с \textbf{a} = \textbf{1} и \textbf{f} = \textbf{5}. Очевидно, что первый способ быстрее, ибо не нужно присваивать значение РВБ. Теперь предположим, что нужно обратиться к ячейке \textbf{20} в той же памяти. Сейчас применим только один способ: выполнить инструкцию, установив значение РВБ \textbf{2} (если в нем уже не хранится нужное значение), и затем инструкцию с \textbf{a} = \textbf{1} и \textbf{f} = \textbf{4}. Программа представляет собой последовательность операций. Каждая операция это: \begin{itemize} \item обращение к переменной, записывается как \textbf{V_i}, где \textbf{i} --- положительное целое число; \item повторение, записывается как \textbf{R_n} < \textbf{program }> \textbf{E}, где \textbf{n} --- положительное целое число, а < \textbf{program} > --- произвольная программа, эта операция эквивалентна выполнению программы \textbf{n} раз. \end{itemize} Задача состоит в определении минимального времени выполнения программы. А именно, зная количество и размер банков, а также имея программу, требуется определить минимальное количество инструкций \textbf{1 }(обращения к ячейкам и, возможно, установки значения РВБ) необходимое для выполнения программы. Для этого вам требуется ассоциировать переменные с ячейками памяти и среди всех отображений определить то, которое минимизирует число инструкций. Нужно выдать само это число. Обратите внимание, что значение РВБ до первого присвоения не определено. \InputFile Входные данные содержат один тест, состоящий из двух строк. В первой \textbf{b} и \textbf{s }--- количество банков и количество переменных, которое можно хранить в банке. Вторая строка содержит непустую программу с не более чем \textbf{1000} элементами (каждый из \textbf{R_n}, \textbf{V_i} и \textbf{E} считается за один элемент). Можно предполагать, что: \begin{itemize} \item в повторении \textbf{R_n}, \textbf{n} удовлетворяет условию \textbf{1} ≤ \textbf{n} ≤ \textbf{10^6}; \item тело повторения \textbf{R_n} < \textbf{program }> \textbf{E} < \textbf{program }> не пусто; \item в обращении к переменной \textbf{V_i}, \textbf{i} удовлетворяет условию \textbf{1} ≤ \textbf{i} ≤ \textbf{min}(\textbf{b}*\textbf{s}, \textbf{13}); \item общее число обращений к переменным в программе не превосходит \textbf{10^12}. \end{itemize} \OutputFile Выведите одно число --- минимальное число инструкций, необходимое для выполнения программы.
Лимит времени 10 секунд
Лимит использования памяти 256 MiB
Входные данные #1
1 2
V1 V2 V1 V1 V2
Выходные данные #1
5
Источник ACM-ICPC World Finals 2013