#2101. Concurrently Balanced Strings

Concurrently Balanced Strings

题目描述

FarmerJohn\red{Farmer John }的奶牛都是一个非常奇特的品种,以其独特的外观而闻名\red{--}每头奶牛的皮上都标有一个括号形状的巨大斑点(取决于奶牛面对的方向,这可能看起来像左括号或右括号)。

一天早上,FarmerJohn\red{Farmer John }将他的奶牛排列成 K\red{K }行,每头 N\red{N }头奶牛 (1<=K<=10,1<=N<=50,000)\red{(1 <= K <= 10, 1 <= N <= 50,000)}。奶牛的方向相当随意,所以这个阵容可以用 K\red{K }个长度为 N\red{N }的括号 S1\red{S_1}、...、Sk\red{S_k }字符串来描述。FarmerJohn\red{Farmer John }非常兴奋地注意到,他的某些范围内的奶牛是"同时平衡的",其中只有当字符串 S1\red{S_1}、...、Sk\red{S_k }中的每一个在 该范围内平衡时,范围 i...j\red{i...j }的奶牛才会同时平衡(我们在下面定义了单个括号平衡的含义)。例如,如果 K=3\red{K = 3,}我们有

S1=)()((())))(())\red{S_1 = )()((())))(())}

S2=()(()()()((())\red{S_2 = ()(()()()((())}

S3=)))(()()))(())\red{S_3 = )))(()()))(())}

111101234567890123\red{1111 01234567890123}

然后范围 [3...8]\red{[3...8] }是同时平衡的,因为 S1[3...8]=((()))\red{S_1[3...8] = ((()))}S2[3...8]=()()()\red{S_2[3...8] = ()()() }S3[3...8]=(()())\red{S_3[3 ...8] = (()())}。范围 [10...13]\red{[10...13] }[11...12]\red{[11...12] }也是同时平 衡的。

给定 K\red{K }个长度为 N\red{N }的括号串,帮助 FarmerJohn\red{Farmer John }计算对 (i,j)\red{(i,j) }的数量,以使 i...j\red{i...j }的范围同时平衡。

有几种方法可以定义单个括号字符串"平衡"的含义。也许最简单的定义是 (\red{(}'s\red{s })\red{)}'s\red{s }的总数必须相同,并且对于字符串的任何前缀,(\red{(}'s\red{s })\red{)}'s\red{s }的数量必须至少一样多。例如,以下字符串都是平衡的:

()(())()(()())\red{() (()) ()(()())}

虽然这些不是:

)(())(((())))\red{)( ())( ((())))}

给出k\red{k}个长度为n\red{n}的括号序列,问有多少个区间在k\red{k}个序列中对应的子串均平衡。

输入格式

1\red{1 }行:两个整数,K\red{K }N\red{N}

2..K+1\red{2..K+1 }行:每行包含一个长度为 N\red{N }的括号字符串。

输出格式

1\red{1 }行:单个整数,同时平衡范围的数量。

样例

输入样例

3 14 
)()((())))(()) 
()(()()()((()) 
)))(()()))(())

输出样例

3