• 【Codeforces Round #459 (Div. 2) C】The Monster


    【链接】 我是链接,点我呀:)
    【题意】

    在这里输入题意

    【题解】

    左括号看成1 右括号看成-1 设置l,r表示前i个数的和的上下界 遇到 左括号 l和r同时加1 遇到右括号 同时减1 遇到问号 因为问号可以为1或-1所以l减1而r加1 如果在某个时刻r小于0了 就说明再也不能继续了 因为说明左括号和问号比右括号来得少了

    如果l<0则把l置为0,因为不允许和出现<0的情况

    否则如果l等于0就说明有一种方法能让前i个数的和为0
    当然当前枚举的序列长度要为偶数

    【代码】

    #include <bits/stdc++.h>
    using namespace std;
    
    const int N = 5e3;
    
    char s[N+10];
    int n;
    int main(){
    	#ifdef LOCAL_DEFINE
    	    freopen("rush_in.txt", "r", stdin);
    	#endif
    	ios::sync_with_stdio(0),cin.tie(0);
        cin >>(s+1);
        n = strlen(s+1);
        int ans = 0;
        for (int i = 1;i <= n;i++){
            int l = 0,r = 0;
            for (int j = i;j <= n;j++){
                if (s[j]=='('){
                    l++,r++;
                }else if (s[j]==')'){
                    l--,r--;
                }else if (s[j]=='?') {
                    l--,r++;
                }
                if (r<0) break;
                if (l<0) l = 0;
                if (l==0 && ((j-i+1)%2==0)) ans++;
            }
        }
        cout<<ans<<endl;
    	return 0;
    }
    
  • 相关阅读:
    BZOJ2759 一个动态树好题
    BZOJ3527 力
    HDU6069 String
    HDU5069 Harry And Biological Teacher
    AC自动机初步
    HDU6155 Subsequence Count
    while与until
    RADI
    linux压缩及归档
    挂载与卸载
  • 原文地址:https://www.cnblogs.com/AWCXV/p/8384019.html
Copyright © 2020-2023  润新知