题目 20380

括号值比较

查看题解 ↗GitHub ↗如何评测
题号
20380
时间限制
1000 ms
内存限制
256 MB
标签
比赛CSP-S
来源
CSP-S 国外模拟赛 25 - T2

第 2 题 括号值比较 (compareparenthesesva)

CSP-S 复赛模拟赛 25 · 时间限制 1.0 s · 空间限制 256 MB · 104 个测试点 · 全文比较(过滤行末空格及文末回车)

本题使用文件输入输出:输入文件 compareparenthesesva.in,输出文件 compareparenthesesva.out。

按照署名—非商业性使用—相同方式共享 4.0 协议国际版进行授权。

题目描述

使用左括号(和右括号)构成的字符串中,所谓"正确括号序列"定义如下:

  • 仅包含一对括号的字符串 () 是一个正确的括号序列。
  • 若 XX 是一个正确的括号序列,则用括号将 XX 包起来形成的 (X)(X) 也是一个正确的括号序列。
  • 若 XX 和 YY 都是正确的括号序列,则将它们连接而成的 XYXY 也是一个正确的括号序列。
  • 所有正确的括号序列都只能通过以上三条规则构造出来。

例如,((()(()))) 和 (())()() 是正确的括号序列,而 ()() 或 ))((() 都不是正确的括号序列。

对于一个正确的括号序列 XX,我们定义其括号值 f[X]f[X],具体如下:

  • f(())=1f(()) = 1;
  • 若 XX 是一个正确的括号序列,则 f((X))=2×f[X]f((X)) = 2 \times f[X];
  • 若 XX 和 YY 是正确的括号序列,则 f[XY]=f[X]+f[Y]f[XY] = f[X] + f[Y]。

我们来看几个例子:

  • f(())=1f(()) = 1;
  • f((()))=2×f[()]=2×1=2f((())) = 2 \times f[()] = 2 \times 1 = 2;
  • f(())()=f[()]+f[()]=1+1=2f(())() = f[()] + f[()] = 1 + 1 = 2;
  • f(()())=f[()]+f[()]=1+2=3f(()()) = f[()] + f[()] = 1 + 2 = 3;
  • f((()()))=2×f[()()]=2×2=4f((()())) = 2 \times f[()()] = 2 \times 2 = 4;
  • f(((())))=2×f[((()))]=2×2=4f(((()))) = 2 \times f[((()))] = 2 \times 2 = 4;
  • f(()(()))=f[()]+f[(())]=1+2=3f(()(())) = f[()] + f[(() )] = 1 + 2 = 3;
  • f((()()))(())=f[((()()))]+f[(())]=4+3=7f((()()))(()) = f[((()()))] + f[(())] = 4 + 3 = 7。

你的任务是读取两个正确的括号序列 AA 和 BB,比较它们的括号值 f[A]f[A] 与 f[B]f[B]。

也就是说,判断 f[A]=f[B]f[A] = f[B]、f[A]<f[B]f[A] < f[B] 还是 f[A]>f[B]f[A] > f[B]。

一个输入中会包含 TT 个测试用例。

输入格式

第一行包含一个整数 TT,表示测试用例的个数。

接下来的 TT 个测试用例中,每个测试用例由如下两行组成:

  • 第一行为括号序列 AA;
  • 第二行为括号序列 BB。

输出格式

对于每个测试用例,输出一行结果:

  • 若 f[A]=f[B]f[A] = f[B],输出等号 =;
  • 若 f[A]<f[B]f[A] < f[B],输出小于号 <;
  • 若 f[A]>f[B]f[A] > f[B],输出大于号 >。

样例

样例 1

输入:

文本
1
(())
()()

输出:

文本
=

样例 2

输入:

文本
1
()()()
(())

输出:

文本
<

样例 3

输入:

文本
2
((()))
()(()
(((())))
()()()()()

输出:

文本
>
>

提示

样例 1 说明

f[A]=f((()))=2f[A] = f((())) = 2,f[B]=f(()())=2f[B] = f(()()) = 2,因此 f[A]=f[B]f[A] = f[B]。

样例 2 说明

f[A]=f(()()())=3f[A] = f(()()()) = 3,f[B]=f(((())))=4f[B] = f(((() ))) = 4,因此 f[A]<f[B]f[A] < f[B]。

样例 3 说明

  • 第一个测试用例中,f[A]=f[((()))]=4f[A] = f[((()))] = 4,f[B]=f[()(())]=3f[B] = f[()(())] = 3,因此 f[A]>f[B]f[A] > f[B]。
  • 第二个测试用例中,f[A]=f[(((())))]=8f[A] = f[(((())))] = 8,f[B]=f[()()()()()]=5f[B] = f[()()()()()] = 5,因此 f[A]>f[B]f[A] > f[B]。

约束条件

  • 1≤T≤101 \le T \le 10
  • AA 和 BB 都是正确的括号序列。
  • 一个输入中所有测试用例中 AA 的总长度之和不超过 3×1063 \times 10^6。
  • 一个输入中所有测试用例中 BB 的总长度之和不超过 3×1063 \times 10^6。

子任务

  1. (3 分)AA 和 BB 的长度都不超过 6。
  2. (23 分)AA 和 BB 的长度都不超过 50。
  3. (13 分)
    • 括号数量相等,且所有右括号都出现在所有左括号之后的括号序列,称为"简单括号序列"。
      • 例如 ()、(())、((()))、((((())))) 都是简单括号序列。
      • AA 和 BB 都是由长度各不相同的多个简单括号序列拼接而成的。
      • 比如 ()(())、(((()))()((()))) 是符合的例子。
      • (()())(()) 也是由简单括号序列拼接而成,但因为包含了两段长度相同的简单括号序列 (()),因此在此子任务中不会出现这种情况。
  4. (61 分)无额外约束条件。

数据下载

题目 20380 的公开数据

正在读取文件列表…

常用命令

题目 20380 的 ROJ 命令

以下命令默认使用全局安装的 ROJ Skill,请在终端中直接执行;如果修改过 AGENT_HOME,请将命令中的 ~/.agents 替换为对应目录。