给定一个字符 SS,长度为 NN。由 SS 构成出新的字符串 TT,长度也为 NN。
起初 TT 是一个空串,然后执行 NN 次操作,每次操作有两种选择:
- 从 SS 头部删除一个字符,加到 TT 的尾部
- 从 SS 尾部删除一个字符,加到 TT 的尾部
我们要决定一种最优的操作方案,使得 TT 串的字典序最小。
输入
- 第一行整数 N(1 \leq N \leq 2000)N(1≤N≤2000),表示 SS 串的长度
- 接下来 NN 行,每行一个大写英文字符,表示 SS 串的每个字符
输出
- 输出一行或多行:每行最多 8080 个字符,当 TT 串太长,需要换行再继续输出
样例 1
输入
6 A C D B C B
输出
ABCBCD
#include<iostream>
using namespace std;
const int MAX_N=100000;
int N;
char S[MAX_N+1];
char T[MAX_N];
int main()
{
cin>>N;
for(int i=0;i<N;i++)
cin>>S[i];
int a=0,b=N-1;
int j=0;
while(a<=b)
{
bool left=false;
for(int i=0;a+i<=b;i++)
{
if(S[a+i]<S[b-i])
{
left=true;
break;
}
else if(S[a+i]>S[b-i])
{
left=false;
break;
}
}
if(left) {T[j++]=S[a++];}
else {T[j++]=S[b--];}
}
int count=0;
for(int i=0;i<j;i++)
{
cout<<T[i];
count++;
if(count==80){cout<<endl;count=0;}
}
}