QOJ.ac

QOJ

Time Limit: 5 s Memory Limit: 256 MB Total points: 100 Interactive

#1214. 有限内存

Statistics

入选国际信息学奥林匹克竞赛日本代表队的 JOI 酱,为了提高信息处理技术,被信息学奥林匹克日本委员会的 K 理事长提出了如下课题。

K 理事长在笔记本上写下了一个字符串 $S$,JOI 酱对此并不知情。$S$ 由 ‘<’, ‘>’, ‘[’, ‘]’ 这 4 种字符组成。K 理事长交给 JOI 酱一份打印件,上面写着课题内容和 $S$ 的长度。

JOI 酱的课题是判定 $S$ 是否为“好字符串”。在此,“好字符串”定义如下: 空字符串(即长度为 0 的字符串)是好字符串。 若 $x$ 是好字符串,则 $$(即用尖括号 $<>$ 括住 $x$ 的字符串)是好字符串。 若 $x$ 是好字符串,则 $[x]$(即用方括号 $[]$ 括住 $x$ 的字符串)是好字符串。 若 $x, y$ 是好字符串,则 $xy$(即按此顺序连接 $x, y$ 的字符串)是好字符串。 * 除此之外,不再有其他好字符串。

例如,“$<>[]$” 和 “$[<>]<>$” 是好字符串,而 “$><$” 和 “$[<]>$” 不是好字符串。

JOI 酱每天正午最多可以给 K 理事长打一次电话。在电话中,通过指定整数 $I$,可以从 K 理事长那里获知 $S$ 的第 $I$ 个字符。

现在,JOI 酱被施加了一个重大限制:“在此课题中不得做笔记”。JOI 酱每晚 22 点睡觉,次日早晨 6 点起床,但在睡眠期间只能记住 22 比特的信息。更准确地说,在睡前必须记住一个 0 以上且 $2^{22} - 1$ 以下的整数,次日必须仅根据所记住的整数来处理课题。不过,由于 $S$ 的长度写在打印件上,因此可以随时查阅。

JOI 酱也可以选择在睡前不记住整数,而是通过电子邮件向 K 理事长回答 $S$ 是否为好字符串。在这种情况下,课题结束,并判定正误。但是,如果从课题开始起 15 000 天内没有发送电子邮件,则判定为错误。

课题

请实现 JOI 酱的策略,编写一个能够通过上述课题的程序。

实现细节

你必须编写一个实现 JOI 酱策略的程序。程序必须包含 Memory_lib.h

程序必须实现以下函数:

  • int Memory(int N, int M)

该函数对应 JOI 酱在给定字符串 $S$ 的长度及所记住的整数时的当日行动。

  • 参数 $N$ 是字符串 $S$ 的长度 $N$。
  • 参数 $M$ 是前一天睡前记住的内容所表示的整数 $M$。注意,课题开始时视为记住了 $M = 0$。
  • 在此函数中,可以调用最多 1 次下述的 Get 函数。
  • 此函数必须返回 0 以上且 $2^{22} - 1$ 以下的整数,或者返回 $-1$ 或 $-2$。如果返回该范围之外的值,则判定为错误 [1]。
    • 返回值为 0 以上且 $2^{22} - 1$ 以下的整数时,表示睡前记住该值。
    • 返回值为 $-1$ 时,表示通过电子邮件回答“$S$ 是好字符串”。
    • 返回值为 $-2$ 时,表示通过电子邮件回答“$S$ 不是好字符串”。
  • 该函数的行为预期仅依赖于参数 $N, M$ 的值以及所调用的 Get 的返回值。此外,在实际的评分程序中,该函数会被调用 $2^{22} \times 4$ 次。详情请参阅“评分步骤”和“重要注意事项”。

程序中可以调用以下函数:

  • char Get(int I)

该函数在每次调用 Memory 时最多只能调用 1 次。如果调用 2 次以上,则判定为错误 [2]。 参数 $I$ 必须是满足 $1 \le I \le N$ 的整数 $I$。如果不满足此条件,则判定为错误 [3]。 该函数的返回值表示字符串 $S$ 的第 $I$ 个字符。

评分步骤

评分用的各输入数据由多个测试用例组成,在这些测试用例中,字符串 $S$ 的长度均为相同的值 $N$。

评分按以下步骤进行。如果被判定为错误,程序将在该时刻终止。

(1) 汇总调查对于参数 $N, M$ 的值以及 Get 的返回值的所有情况下 Memory 的行为。即,对于满足 $0 \le M \le 2^{22} - 1$ 的每个整数 $M$,执行以下操作: (i) 将字符 $c$ 分别设为 ‘<’, ‘>’, ‘[’, ‘]’,执行以下操作: 以 $N$ 为参数 $N$,以 $M$ 为参数 $M$ 调用 Memory。此时,如果调用了 Get,则返回字符 $c$。将 Memory 的返回值记为 $m(M, c)$。 (ii) 在 (i) 的 4 次 Memory 调用中,是否调用 Get 必须相同。此外,如果调用了 Get,则 4 次必须都以相同的整数 $I$ 作为参数 $I$ 进行调用;如果未调用 Get,则 4 次必须返回相同的值。如果不满足这些条件,则判定为错误 [4]。将调用 Get 时的参数 $I$ 记为 $i(M)$(若未调用 Get,则设 $i(M) = 1$)。

(2) 针对各测试用例中的字符串 $S$,进行题目描述中所述课题的模拟。即,执行以下操作: (i) 设 $M = 0$。 (ii) 重复以下操作: (a) 设 $c$ 为 $S$ 的第 $i(M)$ 个字符。 (b) 将 $M$ 替换为 $m(M, c)$。 (c) 若 $M = -1$ 或 $M = -2$,则进入 (iii)。 (d) 若到达此步骤 15 000 次,则判定为错误 [5]。 (iii) 若满足以下任一情况,则判定为错误 [6]: $S$ 是好字符串,但 $M = -2$。 $S$ 不是好字符串,但 $M = -1$。

(3) 判定为正确。

重要注意事项

  • 执行时间测量和内存使用测量对象是“评分步骤”中的步骤 (1)。请注意,在步骤 (1) 中 Memory 会被调用 $2^{22} \times 4$ 次。
  • 请注意,在步骤 (1) 的 $2^{22} \times 4$ 次所有 Memory 调用中,不得出现错误 [1], [2], [3],也不得引发运行时错误。

数据范围

所有输入数据满足以下条件: $1 \le (S \text{ 的长度}) \le 100$。 $S$ 的每个字符均为 ‘<’, ‘>’, ‘[’, ‘]’ 中的任意一个。

子任务

  • 子任务 1 [10 点]:满足 $(S \text{ 的长度}) \le 8$。
  • 子任务 2 [10 点]:满足 $(S \text{ 的长度}) \le 14$。
  • 子任务 3 [5 点]:满足 $(S \text{ 的长度}) \le 24$。
  • 子任务 4 [5 点]:满足 $(S \text{ 的长度}) \le 30$。
  • 子任务 5 [10 点]:$S$ 的每个字符均为 ‘<’, ‘>’ 中的任意一个。
  • 子任务 6 [60 点]:无附加限制。

样例

输入格式 1

4 1
<>[]

输出格式 1

-1

说明

以上展示了 grader-simple 读取的输入示例以及对应的函数调用示例。当进行交互时,grader-simple 输出 -1

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
EditorialOpen Official EditorialQingyu- Download

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.