55分求助

P1241 括号序列

北方有小仙儿 @ 2018-08-31 21:01:34

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm> 
using namespace std; 
int f[105][105]; 
char a[105],b[105];
char q[105];
int top,head;
int main()
{
     cin>>a;
     int len=strlen(a);
     for(int i=0;i<=len;i++)
     {
        if(a[i]=='(')
        {
            q[++top]=a[i];
            b[++head]=a[i];
            b[++head]=')';
        }
        if(a[i]=='[')
        {
            q[++top]=a[i];
            b[++head]=a[i];
            b[++head]=']';
        }
        if(a[i]==')')
        {
             if(q[top]=='(')
             {
                top--;
                b[head]=a[i];
             }
             else {
                top--;
                b[++head]='(';
                b[++head]=a[i];
             }
        }
        if(a[i]==']')
        {
             if(q[top]=='[')
             {
                top--;
                b[head]=a[i];
             }
             else {
                top--;
                b[++head]='[';
                b[++head]=a[i];
             }
        }
     } 
     for(int i=1;i<=head;i++)cout<<b[i];
     return 0;
}

用了一个简单栈之后55分,不用栈直接对比前一个数就47分了。。很迷、、


by 诸神 @ 2018-11-06 21:52:26

同55

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cctype>
#include<stack>
using namespace std;
int n;
char s[110];
stack<int> st;
bool p[110];
int main()
{
    cin>>(s+1);
//  cout<<s+1;
    n=strlen(s+1);
    memset(p,1,sizeof(p));

    for(int i=1;i<=n;i++)
    {
        if(s[i]=='(') st.push(i);
        if(s[i]==')') p[st.top()]=0,p[i]=0,st.pop();
    }
//  for(int i=1;i<=n;i++) cout<<s[i]<<" ";
    for(int i=1;i<=n;i++)
    {
        if(p[i]==1)
        {
            if(s[i]=='(') printf("()");
            if(s[i]=='['||s[i]==']') printf("[]");
        }
        else
        {
            if(s[i]=='(') printf("(");

            if(s[i]==')') printf(")");
        }
    }
    return 0;
}

by Diwanul @ 2019-08-15 22:21:10

同55:

#include<bits/stdc++.h>
using namespace std;
char a[210];
int q[110];
int main(){
    cin>>a;
    int tot=0,l=strlen(a);
    for(register int i=0;i<l;i++){
        q[tot++]=i;
        if(a[i]==')'&&a[q[tot-2]]=='('||a[i]==']'&&a[q[tot-2]]=='[')tot-=2,q[tot]=q[tot+1]=0;
    }
    for(register int i=0;i<tot;i++){
        switch(a[q[i]+i]){
            case '(':{
                for(register int j=l;j>q[i]+1+i;j--)a[j]=a[j-1];
                a[q[i]+1+i]=')';
                l++;
                break;
            }
            case ')':{
                for(register int j=l;j>q[i];j--)a[j]=a[j-1];
                a[q[i]+i]='(';
                l++;
                break;
            }
            case '[':{
                for(register int j=l;j>q[i]+1;j--)a[j]=a[j-1];
                a[q[i]+1+i]=']';
                l++;
                break;
            }
            case ']':{
                for(register int j=l;j>q[i];j--)a[j]=a[j-1];
                a[q[i]+i]='[';
                l++;
                break;
            }
        }
    }
    cout<<a;
    return 0;
}

|