比赛 ?板子大赛 评测结果 AAWWW
题目名称 括号匹配 最终得分 40
用户昵称 wzh 运行时间 0.718 s
代码语言 C++ 内存使用 9.16 MiB
提交时间 2026-01-17 12:41:47
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n;
string s;
stack<char>st;
map<char,int>mp,mp1;
int main(){
    freopen("kakko.in","r",stdin);
    freopen("kakko.out","w",stdout);
    cin.tie(0);
    ios::sync_with_stdio(0);
    cin>>n;
    mp['(']=1,mp['[']=1,mp['{']=1,mp['<']=1,mp['/']=1,mp['#']=2,mp['@']=4,mp['?']=8;
    mp1[')']=1,mp1[']']=1,mp1['}']=1,mp1['>']=1,mp1['\\']=1,mp1['*']=2,mp1['&']=4,mp1['!']=8;
    while(n--){
        cin>>s;int l=s.size(),maxx=0,sum=0,ck=1,ppp=0,l1=0,r1=0;
        while(!st.empty()) st.pop();
        for(int i=0;i<l;i++){
            if(mp1[s[i]]>=1){
                r1++;
                maxx=max(maxx,sum);
                sum=0;
                if(st.empty()){
//                    cout<<"!!!!";
                    cout<<"FALSE\n";
                    ck=0;
                    break;
                }
                if(s[i]==')'&&st.top()=='('||st.top()=='/'||mp[st.top()]>1){
                    st.pop();ppp++;
//                    cout<<st.top()<<' '<<st.size()<<endl;
                }
                else if(s[i]==']'&&st.top()=='['||st.top()=='/'||mp[st.top()]>1){
                    st.pop();ppp++;
//                    cout<<st.top()<<' '<<st.size()<<endl;
                }
                else if(s[i]=='}'&&st.top()=='{'||st.top()=='/'||mp[st.top()]>1){
                    st.pop();ppp++;
//                    cout<<st.top()<<' '<<st.size()<<endl;
                }
                else if(s[i]=='>'&&st.top()=='<'||st.top()=='/'||mp[st.top()]>1){
                    st.pop();ppp++;
//                    cout<<st.top()<<' '<<st.size()<<endl;
                }
                else if(s[i]=='\\'||mp1[s[i]]>1){
                    st.pop();ppp++;
//                    cout<<st.top()<<' '<<st.size()<<endl;
                }
                else{
//                    cout<<"!!!"<<s[i]<<i<<st.top();
                    cout<<"FALSE\n";
                    ck=0;break;
                }
            }
            else if(mp[s[i]]>=1){
                l1++;
                for(int k=1;k<=mp[s[i]];k++)
                    st.push(s[i]),sum++;
            }
        }
        if(ck){
//            cout<<st.size()<<' '<<ppp<<' '<<l1<<' '<<r1<<endl;
//            while(!st.empty()){
//                cout<<st.top();
//                st.pop();
//            }
//            cout<<' ';
            cout<<"TRUE "<<maxx<<' ';
            int res=0,l2=0;
            for(int i=0;i<l;i++){
                if(mp[s[i]]) l2+=mp[s[i]];
                else if(l2==maxx){
                    res++;
                    if(i+1!=l&&mp[s[i+1]]>=1&&mp[s[i-1]]>=1){
                        l2--;
                    }else{
                        l2=0;
                    }
                }
                else l2=0;
            }
            cout<<res<<endl;
        }
    }
    return 0;
}