题目链接
思路:题目中让求出比他大的最小的和比他小的最大的,
可以用prev_permutation试试的,找到第一个括号匹配没问题的就可以输出了,
另一个用next_permutation
代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int a[1000000+10];
int main()
{
string s;
cin>>s;
int len=s.length();
for(int i=0;i<len;i++)
{
a[i]=s[i];
}
do
{
int flag=0;
int sum=0;
for(int i=0;i<len;i++)
{
if(a[i]!=int(s[i]))
{
flag=1;
}
if(a[i]==int('(')) sum++;
else sum--;
if(sum<0)
{
flag=-1;
break;
}
}
if(flag==1&&sum==0)
{
for(int i=0;i<len;i++)
cout<<char(a[i]);
cout<<endl;
break;
}
}while(prev_permutation(a,a+len));
for(int i=0;i<len;i++)
{
a[i]=s[i];
}
do
{
int flag=0;
int sum=0;
for(int i=0;i<len;i++)
{
if(a[i]!=int(s[i]))
{
flag=1;
}
if(a[i]==int('(')) sum++;
else sum--;
if(sum<0)
{
flag=-1;
break;
}
}
if(flag==1&&sum==0)
{
for(int i=0;i<len;i++)
cout<<char(a[i]);
cout<<endl;
break;
}
}while(next_permutation(a,a+len));
}