QOJ.ac

QOJ

حد الوقت: 10 s حد الذاكرة: 2048 MB مجموع النقاط: 100

#8856. 哈佛

الإحصائيات

“哈佛架构”一词适用于具有物理上分离的指令存储器和数据存储器的计算机。该术语起源于 1944 年由 IBM 交付的哈佛马克一号(Harvard Mark I)计算机,它使用纸带存储指令,使用继电器存储数据。

Picture from Wikimedia Commons

一些现代微控制器使用哈佛架构——但不再使用纸带和继电器!数据存储器被组织成若干个存储体(bank),每个存储体包含相同数量的数据项。每条数据引用指令都有一个指向存储体的字节偏移量 $f$ 和一个用于选择所引用存储体的位 $a$。如果 $a$ 为 0,则引用存储体 0。如果 $a$ 为 1,则存储体选择寄存器(BSR)中的值标识要使用的存储体。假设每条指令执行时间相同,并且存在一条可以设置 BSR 值的指令。

例如,假设有 4 个存储体,每个存储体 8 字节。要访问位置 5,可以使用一条 $a=0$ 且 $f=5$ 的指令,或者先用一条指令将 BSR 设置为 0,然后使用一条 $a=1$ 且 $f=5$ 的指令。第一种方法更快,因为它不需要设置 BSR。

现在假设(使用相同的内存)要访问的位置是 20。这里只有一种方法可行:执行一条将 BSR 设置为 2 的指令(除非 BSR 已经具有值 2),然后使用一条 $a=1$ 且 $f=4$ 的指令。

程序是一系列操作。每个操作要么是:

  • 变量引用,写作 $Vi$,其中 $i$ 是正整数,或者
  • 重复操作,写作 $Rn$ <program> $E$,其中 $n$ 是正整数,<program> 是任意程序。该操作等同于顺序执行 $n$ 次 <program>

你的问题是确定程序的最小运行时间。具体来说,给定内存存储体的数量和大小以及要执行的程序,找出执行该程序必须执行的最小指令数(这些指令引用内存位置并可能设置 BSR)。为此,你必须确定一种变量到内存存储体的映射,使得执行时间最小,并报告该执行时间——即所需的内存引用次数和 BSR 寄存器设置次数。BSR 的值最初是未定义的,并且仅在指令显式设置其值时才会改变。

输入格式

输入包含单个测试用例。测试用例由两行组成。第一行包含两个整数 $b$ 和 $s$,其中 $1 \le b \le 13$ 是内存存储体的数量,$1 \le s \le 13$ 是每个内存存储体中可以存储的变量数量。第二行包含一个非空程序,最多有 1 000 个以空格分隔的元素(每个 $Rn$、$Vi$ 和 $E$ 各计为一个元素)。

你可以假设以下内容:

  • 在重复操作 $Rn$ 中,重复次数满足 $1 \le n \le 10^6$。
  • 在循环操作 $Rn$ <program> $E$ 中,循环体 <program> 不为空。
  • 在变量引用 $Vi$ 中,变量索引满足 $1 \le i \le \min(b \cdot s, 13)$。
  • 程序执行过程中执行的变量引用总数最多为 $10^{12}$。

输出格式

显示完成程序必须执行的最小指令数。

样例

输入格式 1

1 2
V1 V2 V1 V1 V2

输出格式 1

5

输入格式 2

2 1
V1 V2 V1 V1 V2

输出格式 2

6

输入格式 3

1 2
R10 V1 V2 V1 E

输出格式 3

30

输入格式 4

4 1
V1 R2 V2 V4 R2 V1 E V3 E

输出格式 4

17

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.