题意是从已知的字符串构造出字典序尽可能小的字符串,每次从首尾中选择一个字符添加到空字符串中
#include <iostream>
using namespace std;
int n;
char s[2016];
int main()
{
bool left = false;
int i,sun,moon,num = 0;
cin >> n;
for(i = 0; i<n ;i++)
{
cin >> s[i];
}
sun = 0,moon = n-1;
while(sun<=moon)
{
for(i=0;i+sun<=moon;i++)
{
if(s[sun+i]<s[moon-i])
{
left = true;
num++;
break;
}
else if(s[sun+i]>s[moon-i])
{
left = false;
num++;
break;
}
}
if(left)
cout << s[sun++];
else
cout << s[moon--];
if(num%80 == 0)
cout << endl;
}
cout << endl;
return 0;
}
这道题目主要应用的就是贪心的做法,唯一需要注意的就是当首尾两个字符相同的时候要注意选择,根据正序字符串和逆序字符串的字典序的大小选择。