QOJ.ac

QOJ

时间限制: 1.0 s 内存限制: 2048 MB 总分: 100

#16189. Latam++

统计

世界上还没有足够多的编程语言。为了解决这个问题,C语言完美化内部委员会(ICPC)计划构建一种全新的编程语言:Latam++。

在 Latam++ 中,变量名仅由一个或多个英文小写字母组成。合法的表达式是一个“格式良好”的字符串,表示如何使用四个算术二元运算符“+”、“-”、“*”和“/”以及可能存在的括号来组合变量。

形式上,合法表达式恰好是可以通过以下规则生成的字符串:

  • 一个变量名是一个合法表达式。
  • 在任何合法表达式两端加上括号会产生另一个合法表达式。
  • 如果 $A$ 和 $B$ 是合法表达式,那么拼接得到的 $AcB$ 也是一个合法表达式,其中 $c$ 是四个算术二元运算符“+”、“-”、“*”和“/”中的任意一个。

因此,以下都是合法表达式:

  • a+b
  • a+b*(c+b)
  • atoms+boots*(charly+bob)
  • (((a)))*(bbasdsaqwe/a/a/a)

相反,以下不是合法表达式:

  • a+
  • a+b(c+b)
  • atoms+boots*((charly+bob)
  • ((()))*(bbasdsaqwe/a/a/a)

该语言还远未完成,在 Latam++ 的第一个版本发布之前,可能需要 ICPC 进行数十年的辩论。与此同时,我们将只关注其编译器的一个特定且非常特殊的功能,称为自动合法子串表达式计数(AVSEC)。

AVSEC 是一个极其有用的功能,编译器会报告给定字符串中作为合法表达式的子串总数。你的任务是实现 AVSEC。

为了计数,如果两个子串的起始或结束索引不同,则它们被视为不同的子串,即使它们对应的字符串是相同的(即它们是相同的字符序列)。

输入格式

输入仅包含一行,其中包含一个字符串 $S$ ($1 \le |S| \le 2 \times 10^5$),该字符串由小写字母、左括号或右括号以及四个字符“+”、“-”、“*”和“/”组成。

输出格式

输出一行,包含一个整数,表示 $S$ 中作为合法表达式的子串数量。

样例

输入样例 1

a+b(c+b)

输出样例 1

7

说明

样例 1 说明: 这七个子串分别是:“a”、“a+b”、“b”(第三个字符)、“(c+b)”、“c”、“c+b”和“b”(第七个字符)。

输入样例 2

aa

输出样例 2

3

输入样例 3

a-a

输出样例 3

3

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.