• 【HDU 6299】Balanced Sequence


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

    在这里输入题意

    【题解】

    我们贪心地把每一个括号序列能匹配都按照栈的规则都匹配出来。 (直接递增匹配对数*2就可以了 最后栈里面就只剩下类似))))(((((((这样的形式了。 现在就相当于有很多个这种字符串了。 让你把它们拼接在一起。 可以用sort贪心一下。 优先把(多的序列放在前面一点。 具体的比较函数这么写 里注释的括号用于参考 (实在不知道原理,就一种一种猜吧。。。。 sort完之后再模拟一下括号匹配就好 ```cpp bool operator < (const abc &b) const{
        //))))((((( (((((
        if (left_brackets>right_brackets){
            //))((((((((((((((
            if (b.left_brackets>b.right_brackets)
                    return right_brackets<b.right_brackets;//都是左括号比较少。那么就右括号少一点的放左边。
            else //b.left<=b.right
            //))))))))))((
                return true;//看上去右括号那么多,就放后面一点吧。。多一点匹配数。
        }else{
    
        //)))))))))))(((
            //left_brackets<=right_brackets
            if (b.left_brackets<=b.right_brackets){ //都是右括号比较多。就让他少祸害一点。让左括号多的放左边.
                //))))))))))))))((
                return left_brackets>b.left_brackets;
            }else{
              //)))))((((((((((((((
                return false; //如果这个左括号那么多的话,就放左边去吧。
            }
        }
    }
    
    </font>
    
    <font color = black size = 6> 【代码】</font>
    ```cpp
    #include <bits/stdc++.h>
    #define LL long long
    #define rep1(i,a,b) for (int i = a;i <= b;i++)
    #define rep2(i,a,b) for (int i = a;i >= b;i--)
    #define all(x) x.begin(),x.end()
    #define pb push_back
    #define lson l,mid,rt<<1
    #define rei(x) scanf("%d",&x)
    #define rel(x) scanf("%lld",&x)
    #define res(x) scanf("%s",x)
    #define rson mid+1,r,rt<<1|1
    using namespace std;
    
    const double pi = acos(-1);
    const int dx[4] = {0,0,1,-1};
    const int dy[4] = {1,-1,0,0};
    const int N = 1e5;
    
    struct abc{
        int right_brackets,left_brackets;
        //))))))))((
        //))(((((((((((
        bool operator < (const abc &b) const{
    
            //))))((((( (((((
            if (left_brackets>right_brackets){
                //))((((((((((((((
                if (b.left_brackets>b.right_brackets)
                        return right_brackets<b.right_brackets;
                else //b.left<=b.right
                //))))))))))((
                    return true;
            }else{
    
            //)))))))))))(((
                //left_brackets<=right_brackets
                if (b.left_brackets<=b.right_brackets){
                    //))))))))))))))((
                    return left_brackets>b.left_brackets;
                }else{
                    return false;
                }
            }
        }
    }a[N+10];
    
    int n;
    char s[N+10];
    int sta[N+10];
    
    int main(){
    	#ifdef LOCAL_DEFINE
    	    freopen("rush_in.txt", "r", stdin);
    	#endif
        int T;
        rei(T);
        while(T--){
            long long ans = 0;
            rei(n);
            for (int i = 1;i <= n;i++){
                a[i].left_brackets = a[i].right_brackets = 0;
                res(s);
                int len = strlen(s);
                int top = 0;
                for (int j = 0;j < len;j++)
                    if (s[j]==')'){
                        if (top>0 && sta[top]==0){
                            top--;
                            ans+=2;
                        }else
                            sta[++top] = 1;
                    }else{
                        sta[++top] = 0;
                    }
                rep1(j,1,top)
                    if (sta[j]==1)
                        a[i].right_brackets++;
                    else
                        a[i].left_brackets++;
            }
            sort(a+1,a+1+n);
            int now = 0;
            rep1(i,1,n){
                int temp = min(now,a[i].right_brackets);
                now-=temp;
                ans+=(temp*2);
                now+=a[i].left_brackets;
            }
            printf("%lld
    ",ans);
        }
    	return 0;
    }
    
    
  • 相关阅读:
    Python-属性描叙符协议ORM实现原理依据- __set__ __get__ __delete__
    Python-类属性查询协议-__getattr__ __getattribute__
    Python-__init__ 和 __new__区别和原理
    Python-在不在判断 in 和 in判断协议- in __contains__
    Python-求序列长度和序列长度协议-len() __len__
    Python-序列反转和序列反转协议-reversed __reversed__
    Python-序列切片原理和切片协议-[start:end:step] __getitem__
    Python-序列常用方法 + * += extend append方法区别
    Python其他数据结构collection模块-namtuple defaultdict deque Queue Counter OrderDict arrary
    Python-函数式编程-map reduce filter lambda 三元表达式 闭包
  • 原文地址:https://www.cnblogs.com/AWCXV/p/9362439.html
Copyright © 2020-2023  润新知