一半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 wwldx @ 2020-03-30 16:57:36

@Hilarious_Reality 嗯嗯嗯,是的,我访问栈顶元素的位置不对,改了后就过了,谢谢大佬啦


by littlefrog @ 2020-04-13 20:14:29

@wwldx 是的,如果数据是形如这样的:

]]]]]]]]]]]]]]]]]]]]

这份代码会RE


by conprour @ 2020-11-27 23:41:10

//层主的思路和我一样,都没有特殊处理栈
//(甚至RE的点相同)
#include<bits/stdc++.h>
using namespace std;

int cnt; 
char ans[105],b[105];
int pos[105];
struct node
{
    char x;
    int y;
}a[105];
stack<node> s;
int main()
{

    scanf("%s",b);
    int l=strlen(b);
    for(int i=0;i<l;i++)
        a[i].x=b[i];
    for(int i=0;i<l;i++)
    {
        a[i].y=i;
    }
    for(int i=0;i<l;i++)
    {

        if(a[i].x=='('||a[i].x=='[')
            {s.push(a[i]);ans[cnt++]=a[i].x,pos[a[i].y]=1;continue;}
            if(!s.empty())
                            {
        node tmp=s.top();
        if((tmp.x=='('&&a[i].x==')')||(tmp.x=='['&&a[i].x==']')) 
            {s.pop();ans[cnt++]=a[i].x;pos[tmp.y]=0;}
        else 
        {
            pos[i]=1;
            ans[cnt++]=a[i].x; 
        }
                            }
            else {pos[i]=1;ans[cnt++]=a[i].x;}
    }
    /*
    while(!s.empty())
    {
        int t=s.top();
        s.pop();

        else ans2[++cnt2]='(';
    }
    */
    for(int i=0;i<cnt;i++)
    {
//  printf("##%d##",pos[i]);
        if(pos[i]==1) 
        {
            if(ans[i]==']'||ans[i]=='[') printf("[]");
            if(ans[i]=='('||ans[i]==')') printf("()");
        }
        else printf("%c",ans[i]);
    }

    return 0;
}

上一页 |