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 谢谢谢谢