题目链接:http://poj.org/problem?id=3617
题意:给你一个长度为n的字符串S,让你用这个字符串构建一个新的字符串T,构建过程可以反复使用一下任意一种操作
将S的第一个元素删除,放在T的尾部
将S的最后一个元素删除,放在T的头部
让你尽可能的使得T的字典序最小
解析:每次从S拿元素时,只要保证拿到的最小即可,如果头尾选择的元素相等则比较他们下一位,直至比出大小为止
注意一个坑点,就是输出每行只能80个字符,不然会PE
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn = 2005;
char a[maxn];
int main(void)
{
int n;
scanf("%d",&n);
getchar();
for(int i=0;i<n;i++)
{
scanf("%c",&a[i]);
getchar();
}
int l=0,r = n-1;
int cnt = 0;
while(l<=r)
{
int t1=l,t2=r;
bool lb=false;
while(a[t1]==a[t2])
{
if(a[t1+1]<a[t2-1])
{
lb = true;
break;
}
else
{
t1++;
t2--;
}
}
if(lb || a[l]<a[r])
{
printf("%c",a[l]);
l++;
}
else
{
printf("%c",a[r]);
r--;
}
cnt++;
if(cnt==80)
{
puts("");
cnt = 0;
}
}
if(cnt!=0)
puts("");
return 0;
}