Codeforces Round #459 (Div. 2) C题【思维好题--括号匹配问题】

 题意:给出一个串,只包含 ( ? ) 三种符号,求出有多少个子串是完美匹配的.

( ) ? ) => ( ) ( ) 完美匹配
( ( ) ? => ( ( ) )完美匹配
? ? ? ? => ( ) ( )
=> ( ( ) )
算一种子串

思路:看代码。

#include<bits/stdc++.h>

using namespace std;
#define int long long
signed main(){
    string str;
    cin>>str;
    int ans=0;
    for(int i=0;i<str.size();i++){
        int sum=0;
        int add=0;
        for(int j=i;j<str.size();j++){
            if(str[j]=='('){
                sum++;
            }else if(str[j]==')'){
                sum--;
            }else{
                sum--;// 当做右括号
                add++;//?的总个数 
            }
            if(!sum)
                ans++;  //能匹配的时候
            if(sum<0){
                if(add==0){
                    break;
                }else{
                    sum+=2;// 
                    add--;
                }
            }
        }
    }
    cout<<ans<<'\n';
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/pengge666/p/11892459.html