QOJ.ac

QOJ

Total points: 100 Communication

#13594. Mensza

Statistics

Malnar 先生最近创立了 Mensza —— 一个最伟大、最负盛名、也是唯一的国际高智商美食爱好者协会。正如你所猜到的,并不是任何人都能加入这个协会,只有在入会考试中表现出色的特殊候选人才可以。当然,考试由两个部分组成:与 IQ 相关的部分,以及与美食相关的部分。在本题中,我们将展示一个与 IQ 相关的部分,至于美食相关的部分,选手们将在比赛结束后尝试。

本故事中的入会考试候选人是 Alojzije、Benjamin 和 Cecilija。Malnar 先生打量了他们一番,设计了一个合适的问题,首先对 Alojzije 说道:

“ Alojzije,你将第一个进入我的办公室,我会给你看一个整数 $A$。然后,你需要在一张纸上写下一个整数数组 $a = (a_1, a_2, \dots, a_{l_a})$,但数组长度 $l_a$ 不能超过 $L$。”

随后,他转向 Benjamin:

“ Benjamin,你将第二个进入我的办公室,我会给你看一个整数 $B \neq A$。然后,你需要在一张纸上写下一个整数数组 $b = (b_1, b_2, \dots, b_{l_b})$,但数组长度 $l_b$ 不能超过 $L$。”

最后,他对 Cecilija 说道:

“ Cecilija,你将最后一个进入我的办公室,我会给你看一个整数数组 $c$,这个数组是我根据数组 $a$ 和 $b$ 确定的。更具体地说,对于在数组 $a$ 和 $b$ 中出现的每一个数,我会将该数在 $a$ 与 $b$ 的并集中出现的次数加入数组 $c$。同时,我会以非递减顺序将数组 $c$ 呈现给你。例如,如果 $a = (1, 2, 4)$ 且 $b = (1, 1, 2, 3)$,那么我会给你看 $c = (1, 1, 2, 3)$,因为数字 $3$ 和 $4$ 各出现一次,数字 $2$ 出现两次,数字 $1$ 出现三次。在我给你看数组 $c$ 之后,你需要告诉我整数 $A$ 和 $B$ 中哪一个更大。”

他再次对所有候选人说道:

“你们有 60 分钟的时间来思考一个策略,然后我们将开始考试。在那之后,你们将不允许再进行任何交流。我们会重复整个过程若干次,直到我确认你们并不是靠运气等到食物上桌。”

你的任务是想出一种策略,使得 Alojzije、Benjamin 和 Cecilija 能通过考试的 IQ 部分。

输入格式

第一行包含一个整数 $L$,含义如题目描述所示。

第二行包含一个整数 $Q$,表示你需要处理的场景数量。每个场景对应一次在 Malnar 先生办公室中发生的交互。

接下来的 $Q$ 行中,第 $i$ 行描述第 $i$ 个场景。该行将以 alojzijebenjamincecilija 开头,取决于被召入办公室的候选人是谁。

  • 如果第 $i$ 行以 alojzije 开头,则该行还会包含题目描述中的整数 $A$。
  • 如果第 $i$ 行以 benjamin 开头,则该行还会包含题目描述中的整数 $B$。
  • 如果第 $i$ 行以 cecilija 开头,则该行后面会给出 $l_c$(数组 $c$ 的长度),以及按非递减顺序排列的数组元素 $c_1 \le c_2 \le \dots \le c_{l_c}$。

输出格式

接下来的 $Q$ 行中,第 $i$ 行应包含对第 $i$ 个输入场景的回答。

  • 如果第 $i$ 个输入场景的形式为 alojzije A,那么你需要先输出一个整数 $0 \le l_a \le L$(数组 $a$ 的长度),随后输出数组 $a$ 的各个元素,表示 Alojzije 在看到数字 $A$ 后会在纸上写下的数组。数组元素需要在 $0$ 到 $10^9$(含)之间。
  • 如果第 $i$ 个输入场景的形式为 benjamin B,那么你需要先输出一个整数 $0 \le l_b \le L$(数组 $b$ 的长度),随后输出数组 $b$ 的各个元素,表示 Benjamin 在看到数字 $B$ 后会在纸上写下的数组。数组元素需要在 $0$ 到 $10^9$(含)之间。
  • 如果第 $i$ 个输入场景的形式为 cecilija l_c c_1 \dots c_{l_c},那么如果 Cecilija 会根据数组 $c$ 判断 $A > B$,你需要输出 A;反之,如果她会判断 $A < B$,则输出 B。你可以假设数组 $c$ 一定是基于你在处理 alojzije Abenjamin B 场景时所生成的数组 $a$ 和 $b$ 得到的。你的程序可能是在之前的运行中生成了这些数组 $a$ 和 $b$。

子任务

你的解法将会被测试两次。第一次运行中,测试数据只包含 alojzije Abenjamin B 形式的场景。假设你的程序成功处理了所有场景并输出了合法格式的结果,那么将进行第二次运行。

在第二次运行中,所有场景都将以 cecilija 开头,相应的数组 $c$ 将根据你在第一次运行中生成的数组 $a$ 和 $b$ 的不同组合来构造。输入参数 $L$ 在两次运行中是相同的。如果你的程序在第二次运行中正确回答了所有场景,则被视为正确。提交的总运行时间为两次运行时间之和。

设 $N$ 表示某个子任务中所有测试用例里 $A$ 和 $B$ 的最大值,你的解法将根据下表评分:

子任务 分值 限制
1 11 $N = 100,\ L = 200,\ 1 \le Q \le 10\,000$
2 23 $N = 1\,000,\ L = 110,\ 1 \le Q \le 1\,000\,000$
3 66 $N = 500\,000,\ L = 20,\ 1 \le Q \le 1\,000\,000$

样例数据

第一次运行

输入

200
3
alojzije 1
benjamin 2
alojzije 3

输出

1 23
1 42
2 11 11

说明

  • Alojzije 根据数字 1 写下了 $a = (23)$。
  • Benjamin 根据数字 2 写下了 $b = (42)$。
  • Alojzije 根据数字 3 写下了 $a = (11, 11)$。

第二次运行

输入

200
2
cecilija 2 1 1
cecilija 2 1 2

输出

B
A

说明

  • 数组 $c = (1, 1)$ 是基于 $a = (23)$ 和 $b = (42)$ 生成的,因此 $A < B$。
  • 数组 $c = (1, 2)$ 是基于 $a = (11, 11)$ 和 $b = (42)$ 生成的,因此 $A > B$。

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.