关于spj

P1241 括号序列

02Ljh @ 2022-11-04 18:34:08

此题是否添加spj与spj标签

根据管理的帖子说明了构造方式不唯一

然后我就喜拿60pts

#include <bits/stdc++.h>
using namespace std;
string s;
#define INF 0x3f3f3f3f
#define ll long long
vector <int> l;
vector <int> r;
bool p(char a,char b)
{
    if(a=='('&&b==')') return true;
    if(a==')'&&b=='(') return true;
    if(a=='['&&b==']') return true;
    if(a==']'&&b=='[') return true;
    return false;
}
string rrr(char a)
{
    string sss;
    if(a=='[') sss="]";
    if(a==']') sss="[";
    if(a=='(') sss=")";
    if(a==')') sss="(";
    return sss;
}
int main()
{
    string ans="";
    cin>>s;
    int len=s.size();
    for(int i=0;i<len;i++)
    {
        if(s[i]=='('||s[i]=='[')
        {
            l.push_back(i);
        }
        else if(s[i]==')'||s[i]==']')
        {
            //cout<<s[i]<<"=="<<s[l.back()]<<"\n"<<i<<"->"<<l.back()<<"\n";
            if(!l.empty()&&p(s[i],s[l.back()]))
            {
                l.pop_back();
                //continue;
            }
            else cout<<rrr(s[i]);
        }
        cout<<s[i];
    }
    //cout<<s[1]<<"\n";
    while(!l.empty()) { cout<<rrr(s[l.back()]); l.pop_back();}
    return 0;
}

by Ja50nY0un9_as_AgNO3 @ 2022-11-04 18:40:51

请你按照如下的方式给字符串中每个字符配对。

只有按题意模拟才行罢。


by Ja50nY0un9_as_AgNO3 @ 2022-11-04 18:41:01

@02Ljh


by 一扶苏一 @ 2022-11-04 18:46:30

@02Ljh

我本加了了 spj 结果发现这样本题原构造方法就假了(因为这一构造方法不能构造出最短的括号串)

所以我就把 spj 去掉了,然后再次修改了题面。


by Accelessar @ 2022-11-04 18:53:30

@02Ljh hack:])[(

正确输出:[]()[]()

你的输出:[]()[()]

解释:显然该数据配对不了,所以根据题意

配对结束后,对于 ss 中全部未配对的括号,请你在其旁边添加一个字符,使得该括号和新加的括号匹配。

你的输出中对于 [ 的配对显然不在它旁边

如果是我语文出问题了就当我没说


by 02Ljh @ 2022-11-04 19:21:07

@一扶苏一 @Ja50nY0un9 @AZN_0975 谢谢谢谢


|