锰锌求助大佬56分

P1241 括号序列

xiaoyang111 @ 2023-07-10 10:08:54

c++17语言

#include <iostream>
using namespace std;
int main(){
    string str;
    getline(cin,str);
    for (const auto &item : str){
        if (item=='[' || item==']'){
            cout<<"[]";
        }
        if (item=='(' || item==')'){
            cout<<"()";
        }
    }
    return 0;
} 

最稳的做法为什么还是56分

第一行测试点全对,第二行测试点全错。还挺有对比性


by xiaoyang111 @ 2023-07-10 10:09:23

题目也没有说长度限制啊


by xiaoyang111 @ 2023-07-10 10:14:28

再贴一个我的56pts代码

#include <iostream>
#include <vector>
using namespace std;
bool f(const vector<int> &a,const int b){//返回b整数是否存在与a里 
    for (const auto &item : a){
        if (item==b){
            return true;
        }
    }
    return false;
}
int main(){
    string str;
    vector<int> a1;//未匹配的左小括号的下标 
    vector<int> a2;//未匹配的左中括号的下标 
    vector<int> b1;//未匹配的右小括号的下标 
    vector<int> b2;//未匹配的右中括号的下标 
    /*------------↑定义↑-------------*/
    getline(cin,str);
    /*------------↑输入↑-------------*/
    for (int i=0;i<str.size();++i){
        char c=str[i];
        if (c=='('){//左小括号直接入 
            a1.emplace_back(i);
        }
        if (c=='['){//右小括号直接入 
            a2.emplace_back(i);
        }
        if (c==')'){
            if (a1.size()==0){//没有可以匹配的左小括号 
                b1.emplace_back(i);
            }else{//匹配到了 
                int temp=a1[a1.size()-1];
                bool flag=true;
                for (int k=temp+1;k<i;++k){
                    if (str[k]=='[' || str[k]==']'){
                        flag=false;
                        break;
                    }
                }
                if (flag){
                    a1.pop_back();
                }else{
                    b1.emplace_back(i);
                }
            }
        }
        if (c==']'){
            if (a2.size()==0){//没有匹配到左中括号 
                b2.emplace_back(i);
            }else{//匹配到了  
                int temp=a2[a2.size()-1];
                bool flag=true;
                for (int k=temp+1;k<i;++k){
                    if (str[k]=='(' || str[k]==')'){
                        flag=false;
                        break;
                    }
                }
                if (flag){
                    a2.pop_back();
                }else{
                    b2.emplace_back(i);
                }
            }
        }
    }
    /*------------↑操作↑-------------*/
    for (int i=0;i<str.size();++i){
        char c=str[i];
        if (c=='('){
            cout<<c;
            if (f(a1,i)){
                cout<<")";
            }
        }else if (c==')'){
            if (f(b1,i)){
                cout<<"(";
            }
            cout<<c;
        }else if (c=='['){
            cout<<c;
            if (f(a2,i)){
                cout<<"]";
            }
        }else if (c==']'){
            if (f(b2,i)){
                cout<<"[";
            }
            cout<<c;
        }else{
            cout<<c;
        }
    }
    /*------------↑输出↑-------------*/
    return 0;
}

by gao_shou @ 2023-08-01 16:16:32

我也是


by ordoki @ 2023-08-02 15:12:00

我也是


by dingjingyi @ 2023-08-07 22:08:44

我也是


by wangyutian578 @ 2023-08-12 15:41:34

我也是


|