【题意简述】:就是给定一个长度为N的字符串S,yao构造一个长度为N的字符串t。起初,T是一个空串,随后反复进行下列任一操作。
1、从S的头部删除一个字符,加到T的尾部。
2、从S的尾部删除一个字符,加到T的尾部。
现在让我们构造字典序尽可能小的字符串T。
【思路】:思路很好建立,就是简单的贪心,我们可以一次的将S的头部与尾部的元素进行比较,小的加到T的尾部。
这样就解决了!具体实现,详见代码!
#include<iostream>
using namespace std;
#define MAX_N 2005
int N;
char S[MAX_N+1];
void solve()
{
int count = 1;
int a = 0,b = N-1;
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) putchar(S[a++]);
else putchar(S[b--]);
// PE????80???????????У?
count++;
if(count>80){
cout<<endl;
count = 1;
}
}
}
int main()
{
cin>>N;
for(int i = 0;i<N;i++)
cin>>S[i];
solve();
return 0;
}