题意: 告诉你一个长度为n的字符串,每次只能从头或者尾抽出一个字母。要你输出字典序(ASCLL码)最小的情况。
思路: 贪心,每次取,肯定取头和尾字典序最小的那个,但对于相同的情况,我们就要判断到底先取那个更有优势,那就要头和尾往中间查,查到哪个达到的比较小,那就是哪个了。
#include <cstdio>
#include <iostream>
using namespace std;
const int maxn=2e3+500;
char str[maxn];
int cnt=0;
int main(void)
{
int n;
cin >> n;
int a=0,b=n-1;
for(int i=0;i<=n-1;i++)
scanf("%s",str+i);
//printf("%s\n",str);
while(a<=b)
{
bool left=false;
for(int i=0;a+i<=b;i++)
{
if(str[a+i]<str[b-i])
{
left=true;
break;
}
else if(str[a+i]>str[b-i])
{
left=false;
break;
}
else if(str[a+i]==str[b-i])
continue;
}
if(left) printf("%c",str[a++]);
else printf("%c",str[b--]);
cnt++;
if(cnt==80)
{
printf("\n");
cnt=0;
}
}
}