1.22闲话

推歌:夏虫/洛天依

生贺曲里最喜欢的一首!光与影的对白感觉对我感触都没这个更大

我最喜欢的歌之一了算是,之前比较难受的时候都会听一下,以至于这首歌的百度词条都是我编辑的,在B站买的第一个个性装扮也是这个,第一件买的周边也是九周年的(是啥忘了),所以一直比较感激LS和人形兎,不然估计就在之前那几次考崩直接 AFO 变成 whker 了

非常不好的是这个图是我传上去的,但是现在有了百度百科的水印

image

今天比较无意义,快期末了所以搞了搞whk

新的贪心策略被 \(jijidawang\)\(\textbf{hack}\)了,寄

昨天模拟赛T3真的不能贪心吗?

然后代码打完发现思路没过,但是代码过了 \(jijidawang\)\(\textbf{hack}\)

所以这是一个接近正解的贪心?但是还是被 \(\text{AcWing}\) 上的数据制裁了

初版贪心思路大概就是去用一个小根堆去存长度,对应的两个括号位置,然后直接去删去所有堆顶取出来的两个括号位置之间的所有括号,让ans加上其中的长度

然后好像过了几个 hack ,又被新的 hack 给 hack 了

我的悲伤逆流成河后面忘了然后放个错误代码吧

#include<bits/stdc++.h>
using namespace std;
inline int read(){
    int f=1,s=0;char ch=getchar();
    while(ch<'0'||'9'<ch){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){s=s*10+ch-'0';ch=getchar();}
    return f*s;
}
string S1;
signed main(){
    int ans=0;
    cin>>S1;
    while(!S1.empty()){
        string S2;
        priority_queue<pair<int,pair<int,int> > > Q;
        for(int i=0;i<S1.size();i++)
            if(S1[i]=='('&&S1[i+1]==')')
                S1[i]=' ',
                S1[i+1]=' ';
            else if(S1[i]=='['&&S1[i+1]==']')
                S1[i]=' ',
                S1[i+1]=' ';
        for(int i=0;i<S1.size();i++)
            if(S1[i]!=' ')
                S2+=S1[i];
        swap(S2,S1);
        if(S1.empty()) 
            break;
        for(int i=0;i<S1.size();i++)
            if(S1[i]==')')
                for(int j=i;j>=0;j--)
                    if(S1[j]=='('){
                        Q.push(make_pair(-(i-j),make_pair(i,j)));
                        break;
                    }
            else if(S1[i]==']')
                for(int j=i;j>=0;j--)
                    if(S1[j]=='['){
                        Q.push(make_pair(-(i-j),make_pair(i,j)));
                        break;
                    }
        if(!Q.empty()){
            int q1=Q.top().first,tot=0;
            pair<int,int> q=Q.top().second,p[105];
            Q.top();
            while(q1==Q.top().first){
                p[++tot]=Q.top().second;
                Q.pop();
            }
            for(int j=q.second;j<=q.first;j++){
                S1[j]=' ';
            }
            ans+=q.first-q.second-1;
        }
        else{
            ans+=S1.size();
            break;
        }
    }
    cout<<ans;
}

提供来自 \(jijidawang\)\(AcWing\) 的几组 \(Hack\)

  • [(])

  • ([[[[[[[[)]]]]]]]]

  • [(])]

  • )([[[][](])[][))(]]])(]][(]))))((]()[)[())]]]])([)[))[)))])]](()[)][[[)](][[[)[](]()](][(([)(]

    这个比较长所以带个输出:36

posted @ 2024-01-22 21:01  Vsinger_洛天依  阅读(26)  评论(0编辑  收藏  举报