QOJ.ac

QOJ

时间限制: 3 s 内存限制: 512 MB 总分: 100 交互

#13562. 括号

统计

众所周知,中央情报局(CIA)负责收集、处理和分析国家安全信息。人们还怀疑他们拥有相当庞大的常用电脑密码库,并且正在开发一些非常先进的工具,能够攻破受密码保护的计算机系统。

风水轮流转,现在你的任务是攻破 CIA 服务器的安全防御。祝你好运!

当然,他们非常清楚人类在想出密码时所使用的典型模式,因此尝试诸如 123456password1q2w3e4rwelcome 之类的密码是徒劳的。幸运的是,我们发现了一些可能对你有用的信息。

具体来说,他们的主密码恰好由 $N$ 个字符组成,其中 $N$ 是一个偶数。这些字符中恰好有一半是左括号((),另一半是右括号())。此外,他们的工程师没有使用常见的“忘记密码?”功能,而是决定向健忘的管理员开放一个 API。通过该 API,管理员最多可以执行 $Q$ 次查询,询问“密码中从第 $a$ 个字符到第 $b$ 个字符的区间是否是合法的括号序列”。

括号序列的合法性归纳定义如下:

  • () 是一个合法的括号序列。
  • 如果 $A$ 是一个合法的括号序列,那么 ($A$) 也是一个合法的括号序列。
  • 如果 $A$ 和 $B$ 都是合法的括号序列,那么 $AB$ 也是一个合法的括号序列。

交互

这是一道交互题。你的程序必须与主办方编写的程序进行通信,该程序模拟了题目描述中虚构的不安全 CIA 服务器的功能。

在开始交互之前,你的程序应该从标准输入中读取一个偶数 $N$ 和一个整数 $Q$。这两个数字的含义已在题目描述中说明。

之后,你的程序可以通过向标准输出写入来发送查询请求。每个查询必须单起一行,格式为 ? a b,其中 $1 \le a \le b \le N$。在写入每个查询后,你的程序应当刷新输出缓冲区(flush),并从标准输入中读取答案。如果密码中从第 $a$ 个字符开始到第 $b$ 个字符结束的区间构成一个合法的括号序列,则答案为 1。否则,答案为 0。你的程序最多可以进行 $Q$ 次此类查询。

在你的程序推导出秘密密码后,应当向标准输出写入一行,格式为 ! x1x2...xN,其中字符 $x_1, x_2, \dots, x_N$ 表示秘密密码的字符。之后,你的程序应当再次刷新输出缓冲区,并正常结束运行。

注意:你可以在评测系统中下载示例源代码,该代码展示了如何正确与 CIA 服务器进行交互,包括如何刷新输出。

子任务

子任务 分值 数据范围
1 14 $1 \le N \le 1\,000$,$Q = \frac{N^2}{4}$,整个密码是一个合法的括号序列。
2 7 $1 \le N \le 1\,000$,$Q = \frac{N^2}{4}$
3 57 $1 \le N \le 100\,000$,$Q = N - 1$,整个密码是一个合法的括号序列。
4 22 $1 \le N \le 100\,000$,$Q = N - 1$

样例

样例输入 1

6 9
1
0
0
1
1

样例输出 1

? 1 6
? 1 2
? 2 4
? 2 5
? 3 4
! ((()))

说明 1

在这个样例中,秘密密码是 ((())),长度为 $6$,程序最多可以询问 $9$ 次。

  • 读入 $N = 6, Q = 9$。
  • 询问 ? 1 6,得到回复 1(整个密码是一个合法的括号序列)。
  • 询问 ? 1 2,得到回复 0(( 不是合法的括号序列)。
  • 询问 ? 2 4,得到回复 0(() 不是合法的括号序列)。
  • 询问 ? 2 5,得到回复 1(()) 是合法的括号序列)。
  • 询问 ? 3 4,得到回复 1() 是合法的括号序列)。
  • 最终输出 ! ((())),成功推导密码。

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.