找到牛(春季每日一题 35)

奶牛贝茜逃跑了,躲在了长满高草的山脊上。

农夫约翰为了抓回贝茜,决定在草地中匍匐前行,从而不被贝茜发现。

不幸的是,发现贝茜并没有那么容易。

约翰面前的草看起来像是一个长度为 N N N 的括号字符串,例如:

)((()())())

约翰清楚贝茜的后腿看上去就像一对相邻的左括号 ((,她的前腿看上去就像一对相邻的右括号 ))

因此,贝茜的位置可以用一对索引 x < y xx<y 来描述,使得 (( 在位置 x x x 处被找到,)) 在位置 y y y 处被找到。

请计算贝茜可能站立的不同位置的数量。

输入格式
共一行,包含一个长度为 N N N 的括号字符串。

输出格式
输出贝茜可能站立的不同位置的数量。

数据范围
1 ≤ N ≤ 50000 1≤N≤50000 1N50000

输入样例:

)((()())())

输出样例:

4

样例解释
4 4 4 种可能的站立位置如下所示:

1. )((()())())
    ^^   ^^

2. )((()())())
     ^^  ^^

3. )((()())())
     ^^     ^^

4. )((()())())
    ^^      ^^

#include

using namespace std;

const int N = 50010;

string s;

int main(){
    
    cin >> s;
    
    int a = 0, b = 0;
    
    for(int i = 1; i < s.size(); i++)
        if(s[i] == '(' && s[i] == s[i - 1]) a++;
        else if(s[i] == ')' && s[i] == s[i-1]) b += a;
        
    cout << b << endl;
    
    return 0;
}

你可能感兴趣的:(春季每日一题,枚举)