一半ac一半re求助

P1241 括号序列

wwldx @ 2020-03-30 16:15:30

样例2,7,9,11,12,13都re 不知道为啥呀,求助

#include <bits/stdc++.h>
using namespace std;
typedef pair<int,char> P;
#define maxn 200 
stack<P> s;
int main()
{

    string s1;
//  char num[maxn];
    int qwe=0,rty=0;
    cin>>s1;
    int zxc[maxn];//标记未配对的位置 
    int n=s1.size();
    for(int i=0;i<n;i++)
    {
        if(s1[i]=='(' || s1[i]=='[')
        s.push(make_pair(i,s1[i]));
//      num[qwe++]=s1[i];
        else
        if(s1[i]==']')
        {
            P asd=s.top();
            if(!s.empty() && asd.second=='[')
            {
//              num[qwe++]=']';
                s.pop();
            }
            else
//          s.push(make_pair(i,s1[i]));
            zxc[rty++]=i;//标记未配对的位置 
        }
        else
        {
            P asd=s.top();
            if(!s.empty() && asd.second=='(')
            {
//              num[qwe++]=')';
                s.pop();
            }
            else
//          s.push(make_pair(i,s1[i]));
            zxc[rty++]=i;
        }
    }
    while(!s.empty())
    {
        P asd=s.top();
        zxc[rty++]=asd.first;
        s.pop();
    }
    sort(zxc,zxc+rty);
    int j=0;
    for(int i=0;i<n;i++)
    {
        if(j<rty && zxc[j]==i)
        {
            j++;
            if(s1[i]=='(' || s1[i]==')')
            cout<<"()";
            else
            cout<<"[]";
        }
        else
        cout<<s1[i];
    }
    return 0;
} 

by tangrunxi @ 2020-03-30 16:17:46

@wwldx 数组开大点


by tangrunxi @ 2020-03-30 16:18:20

好像也不行


by wwldx @ 2020-03-30 16:23:39

@tangrunxi 应该跟数组大小无关,数组最大是100,我直接开了200的。。。


by tangrunxi @ 2020-03-30 16:25:40

@wwldx 好的,我看看


by wwldx @ 2020-03-30 16:27:24

@tangrunxi 谢谢大佬了


by tangrunxi @ 2020-03-30 16:27:52

@wwldx 奇怪,我随便试了几个没错啊


by tangrunxi @ 2020-03-30 16:28:12

难道这题数据玄学


by tangrunxi @ 2020-03-30 16:29:47

@wwldx 我也不知道了,随便试了几个没错


by wwldx @ 2020-03-30 16:32:37

@tangrunxi 这咋办嘛,我换写法试试,谢谢大佬了


by Hexarhy @ 2020-03-30 16:45:13

@wwldx 可能栈空时你却试图访问栈顶元素


| 下一页