zoukankan      html  css  js  c++  java
  • 括号匹配——cf1095E

    正解应该是求后缀和前缀

    但是多情况讨论好像也能过。。

    大概分为:

    首先排除不能改的情况

    1.改左括号

    2.改右括号

    /*
    将一个位置的括号反过来,使原序列变成合法序列 
    */
    #include<bits/stdc++.h>
    using namespace std;
    #define maxn 1000005
    int n,cntl,cntr;
    char s[maxn];
    
    int main(){
        cin>>n>>(s+1);    
        for(int i=1;i<=n;i++){
            if(s[i]==')')cntr++;
            else cntl++;
            if(cntr-cntl>2 || n%2){
                puts("0");
                return 0;
            }
        }
        if(abs(cntl-cntr)!=2){
            puts("0");
            return 0;
        }
        
        int ans=0,l=0,r=0;
        if(cntl>cntr){
            int tl=0,tr=0;
            for(int i=1;i<=n;i++){
                if(s[i]==')')tr++;
                else tl++;
                if(tr>tl){
                    puts("0");
                    return 0;
                }
            }
            for(int i=n;i>=1;i--){
                if(s[i]=='(')l++;
                else r++;
                if(l-r>0){
                    ans=l;
                    break;
                }
            }
        }
        else {
            for(int i=1;i<=n;i++){
                if(s[i]=='(')l++;
                else r++;
                if(r-l>0){
                    ans=r;
                    break;
                }
            }
        }
        
        cout<<ans<<endl;
    }
  • 相关阅读:
    正则表达式复习 (?<=) (?=)
    HTML 30分钟入门教程
    C# 多线程详解
    C# List
    C# 枚举
    C# 线程数
    C# 泛型2
    C# 泛型
    C# 结构体
    不用Google Adsense的84个赚钱方法
  • 原文地址:https://www.cnblogs.com/zsben991126/p/10910937.html
Copyright © 2011-2022 走看看