问题描述:
定义一个括号串的权值为,它的最长合法括号子序列的长度。例如,"())())“的权值是4,它的最长合法括号子序列为”()()"现在求一个给定括号串的所有子串权值之和。
输入描述:
一个仅包含(1和’)'的字符串,长度不超过200000。
输出描述:
输出T行每行1个字符串表示小美能否获胜,如果小美先写完编号为k的题则输出"Win”,如果朋友先写完编号为k的题则输出“Lose”,如果两人同时写完则输出“Tie”.
举例:
())())
4
代码结果:
#include<stdio.h>
#include<stdlib.h>
int main()
{
char a[200000];//存储输入字符
char *p=a;
int before_count=0;//等待匹配状态中的"("数量
int count=0;//完整括号组数
int end_value=0;//有效括号数
gets(a);
while(*p!=0)//括号未结束
{
if(*p=='(')//当前是"("
before_count++;//增加处在等待匹配状态中的"("数量
else//当前是")"
{
if(before_count>0)//有"("处在等待匹配状态中
{
count++;//完整括号组数增加
before_count--;//消耗一个"(""
}
else{};//无前括号等待匹配,忽略
};
p++;//遍历下一个括号
}
end_value=2*count;
printf("%d\n",end_value);
system("pause");
}