4185 - 折页片段(fold)

题目描述

小 R 在整理一本可以左右折叠的笔记。她用字符 ( 表示“向左打开一层折页”,用字符 ) 表示“合上一层折页”。一段连续的折页记录是完整的,当且仅当每一次合上都能对应到此前某一次尚未合上的打开,并且最后所有打开都被合上。

形式化地,合法片段就是一个合法括号串。例如 ()()、(())、(()()) 都是合法片段,而 )(、(()、())( 都不是。

给定一个只包含 ( 和 ) 的字符串 S。请你求出 S 中有多少个连续子串是合法片段。

注意:如果两个合法片段出现的位置不同,即使它们的内容完全相同,也要分别计数。

输入

输入一行一个字符串 S。

输出

输出一行一个整数,表示 S 中合法片段的数量。

样例

输入

()(())

输出

4

输入

())(())()

输出

5

输入

(()())())(()(()))

输出

11
说明

样例说明

对于样例 1,合法片段共有 4 个:

  • 第 1 \sim 2 位:();
  • 第 3 \sim 6 位:(());
  • 第 4 \sim 5 位:();
  • 第 1 \sim 6 位:()(())。

因此输出 4。

样例 2 中,第 3 位的 ) 会把字符串分成两段,合法片段不能跨过这个位置。

数据范围与提示

对于所有测试数据,保证:

  • 1 \le |S| \le 10^6;
  • S 仅由 ( 和 ) 组成。

本题共 10 个测试点,每个测试点 10 分。

测试点编号\lvert S\rvert \le特殊性质
1 \sim 230无
3 \sim 550无
6,810^4A
710^4AB
9 \sim 1010^6无

特殊性质 A:每个位置到它之前的所有位置组成的前缀中,左括号数量始终不少于右括号数量。

特殊性质 B:S 形如 ()()...(),即由若干个 () 连续拼接而成。

标签
题目参数
时间限制 1 秒
内存限制 512 MB
提交次数 11
通过人数 7
金币数量 2 枚
难度 基础


上一题 下一题