QOJ.ac

QOJ

時間限制: 2 s 記憶體限制: 512 MB 總分: 100 通信

#4832. 心灵感应

统计

兄弟 Flim 和 Flam 正在表演一个他们称之为“心灵感应”的戏法。

起初,主持人 Discord 生成两个随机二进制字符串 $a$ 和 $b$。每个字符串包含 $n = 10^6$ 位,每一位等概率且独立地取 0 或 1。字符串 $a$ 给 Flim,字符串 $b$ 给 Flam。他们每个人只能看到自己的字符串,而不知道对方的字符串。

之后,每个兄弟在对方的字符串中选择 $k = 10^5$ 个不同的位置,而这些位置是他们所不知道的!

最后,Discord 从左到右查看字符串 $a$,并写下 Flam 所选位置上的数字。然后他从左到右查看字符串 $b$,并在前一行下方写下 Flim 所选位置上的数字。之后,观众统计有多少对数字(来自 $a$ 的数字与写在它下方的来自 $b$ 的数字)是相同的。为了“证明”心灵感应有效,超过三分之二的数字对必须相同,即至少要有 $66\,667$ 对相同。

请帮助 Flim 和 Flam 规划如何在仅了解自己字符串的情况下选择对方字符串中的位置,以便他们能够“证明”心灵感应有效。

考虑一个小例子: 为了简便,设 $n = 20$,$k = 5$。 设字符串 $a$ 为 00101011011110111001 设字符串 $b$ 为 11000111101000011010 Flim 看到字符串 $a$,并选择字符串 $b$ 中的位置 2, 3, 5, 7, 11。 Flam 看到字符串 $b$,并选择字符串 $a$ 中的位置 1, 4, 9, 16, 20。 Discord 写下 $a_1 = 0, a_4 = 0, a_9 = 0, a_{16} = 1, a_{20} = 1$。 并在它们下方写下 $b_2 = 1, b_3 = 0, b_5 = 0, b_7 = 1, b_{11} = 1$。 在五对数字中,除了第一对外($a_1 = 0$ 但 $b_2 = 1$),其余每对的数字都相同。 这意味着 Flim 和 Flam 达成了 4/5 的相等。 相等比例大于 2/3,所以兄弟俩“证明”了心灵感应有效!

交互

在本题中,你的程序在每个测试点上会被运行两次:第一次作为 Flim,第二次作为 Flam。评测程序扮演 Discord。每一行输入均以换行符结束。

第一轮

在第一轮中,程序扮演 Flim。第一行包含字符串 “Flim”。第二行包含两个空格分隔的整数 $n$ 和 $k$(在本题的所有测试中,$n = 10^6$,$k = 10^5$)。第三行包含 $n$ 个二进制数字(无空格):给 Flim 的字符串 $a$。

输出 $k$ 个空格分隔的整数 $1 \le p_1 < p_2 < \dots < p_k \le n$:在字符串 $b$ 中选择的位置。

第二轮

在第二轮中,程序扮演 Flam。第一行包含字符串 “Flam”。第二行包含两个空格分隔的整数 $n$ 和 $k$(同样,$n = 10^6$,$k = 10^5$)。第三行包含 $n$ 个二进制数字(无空格):给 Flam 的字符串 $b$。

输出 $k$ 个空格分隔的整数 $1 \le q_1 < q_2 < \dots < q_k \le n$:在字符串 $a$ 中选择的位置。

在第二轮结束后,评测程序会比较 $k$ 对数字:首先是 $a_{q_1}$ 与 $b_{p_1}$,然后是 $a_{q_2}$ 与 $b_{p_2}$,以此类推。如果相等对的数量超过 $\frac{2}{3}k$,则该测试点通过(OK)。否则,结果为 Wrong Answer。

本题包含一个可下载的样例和 50 个秘密测试点。所有二进制字符串均由伪随机数生成器预先生成:每个字符串的每一位均等概率且独立地取 0 或 1。

样例

以下展示了某程序在第一个测试点上的两次运行。为简洁起见,字符串和答案仅显示了部分。完整版本的样例可在 samples.zip 中查看。该样例中有 $66\,859$ 对相等的数字。

输入 1

Flim
1000000 100000
110111111110<...>11010111

输出 1

3 14 25 <...> 999979 999990

输入 2

Flam
1000000 100000
000000110100<...>10011111

输出 2

7 16 21 <...> 999977 999992

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.