题意:对给的字符串只能进行两种操作(从头或尾拿走一个字符),使得目标字符串字典序尽可能小
题意明白了思路就清晰了,字典序尽可能小,就把头和尾进行比较,如果相同就比较打头第二个和倒数第二个的大小,直到出现较小的那个再将其(首++或尾--字符)输出,一样的话随便输出头尾字符都行,注意越界并且小心PE(80个字符换一行)。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n;
char s[3000];
void solve()
{
int l = 0,r = n-1,j = 0;
bool tf = true;
while(l <= r)
{
for(int i = 0 ; l+i <= r-i ; i++)
{
if(s[l+i] < s[r-i])
{
tf = true;
break;
}
else
{
if(s[l+i] > s[r-i])
{
tf = false;
break;
}
}
}
if(tf) putchar(s[l++]);
else putchar(s[r--]);
j++;
if(j == 80)
{
putchar('\n');
j = 0;
}
}
putchar('\n');
}
int main()
{
#ifdef H_R
freopen("in.txt","r",stdin);
#endif
ios::sync_with_stdio(false);
cin.tie(false);
while(cin>>n)
{
for(int i = 0 ; i < n ; i++)
cin>>s[i];
solve();
}
return 0;
}