原题:FZU - 1546
题目大意:
给出一个序列q和一个空的序列m,可以从q的头部或者尾部取出一个字符加入到m的尾部,要求新的序列m字典序最小
简单的贪心就行,用两个标记向中间移动,谁小就把谁加入到新序列中
#include <iostream>
#include <cstdio>
using namespace std;
char s[2010];
char m[2010];
int n;
int judge(int l,int r) {
if(s[l]<s[r])
return 0;
else if(s[l]>s[r])
return 1;
if(r-l<=2)
return 0;
return judge(l+1,r-1);
}
int main() {
int i;
while(~scanf("%d",&n)) {
for(i=0; i<n; i++) {
getchar();
scanf("%c",&s[i]);
}
int l=0,r=n-1,t=0;
while(t!=n) {
int temp=judge(l,r);
if(temp) {
m[t++]=s[r];
r--;
} else {
m[t++]=s[l];
l++;
}
printf("%c",m[t-1]);
if(t%80==0)printf("\n");
}
if(t%80)printf("\n");
}
return 0;
}