【提高】删除多余括号

liujiaxing- / 2024-12-14 / 原文

#include <iostream>
using namespace std;
string a;
int b[280]={0};
int fi(char l){
    if(l=='*'){
        return 2;
    }else if(l=='+'){
        return 1;
    }else if(l=='/'){
        return 5;
    }else if(l=='-'){
        return 4;
    }else{
        return 0;
    }
}
bool x(){
    int left=-1,right=-1,in=0,lleft,rright;
    for(int i=0;i<a.size();i++){
        if(a[i]=='('){
            left=i;
        }else if(a[i]==')'){
            right=i;
            break;
        }
    }
    if(left==-1||right==-1){
        return false;
    }
    lleft=fi(a[left-1]);
    rright=fi(a[rright+1]);
    int _min=4;
    for(int i=left+1;i<right;i++){
        if(fi(a[i])>0 && !b[i]){
            if(fi(a[i]<_min)){
                _min=fi(a[i]);    
            }
        }
        b[i]=1;
        b[i-1]=1;
        if(i==right-1){
            b[i+1]=1;
        }
    }
    a[left]='{';
    a[right]='}';
    if(_min<lleft){
        a[left]='[';
        a[right]=']';
    }
    cout<<lleft<<" "<<_min<<" ";
    return true;
}
int main(){
    cin>>a;
    while(x()){
        cout<<a<<endl;
    }
    for(int i=0;i<a.size();i++){
        if(a[i]=='['||a[i]==']'){
        }else if(a[i]=='['){
            cout<<'(';
        }else if(a[i]==']'){
            cout<<')';
        }else {
            cout<<a[i];
        }
    }
    return 0;
}