贪心+思维 枚举

https://vjudge.net/contest/242769#problem/H

题目大意:左括号和右括号数量相等的个数;

思路:从开始枚举,用两个标记指针,一个记录左括号和右括号的数量,出现一个左括号++出现一个右括号--,出现一个?号的话我们先把它当成右括号 所以  左括号 -- 但是问号也要记录下来 所以问号++,当 左括号的数量为零的时候说明左括号和右括号的数量相等,所以答案加1,但是如果左括号的数量小于0的时候,就要把问好变成左括号来平衡数量,所以左括号+2因为右括号少了一个 左边++左括号多了一个左边++,问号--。

代码:

#include<bits/stdc++.h>
using namespace std;

int main()
{
    string s1;
    cin >> s1;
    int sum = 0;
    for(int i = 0; i <s1.size(); i++){
        int l = 0,m = 0;
        for(int j = i; j < s1.size(); j++){
            if(s1[j] == '('){
                l++;
            }
            else if(s1[j] == ')'){
                l--;
            }
            else if(s1[j] == '?'){
                l--;
                m++;
            }
            if(l == 0) sum ++;
            else if(l < 0){
                if(m == 0) break;
                if(m>0){
                    l+=2;
                    m--;
                }
            }
        }
    }
    printf("%d\n",sum);
    
}
 

猜你喜欢

转载自blog.csdn.net/qq_41650771/article/details/81354449