题目描述如图
贪心+STL应用
基本思路
最直观的想法,从第一位开始取,比较他和当前已经排好序的部分开头的数字比较,若比这个数字小,那么一定是放到左边作为新的开头,若是比这个数字大,那么一定放在右边
进一步来讲,得到的最终序列的开头一定是整个原序列中,从右往左数除0以外的最小的数,而这个数后面的数因为都大于这个最小的数,所以一定是顺序插入的,不会再改变顺序,他之前的数还是按照开始直观的想法插入即可,到这个数就放到开头
这里我用了STL中deque,双端队列,他是一个可以从头或者尾插入的队列,可以看做是一个动态的数组
代码
//By AcerMo
#include<deque>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
signed main()
{
int t;cin>>t;
while(t--)
{
char s[105];cin>>s;
int l=strlen(s),m=110;
char mn='9';
for(int i=0;i<l;i++)
if(s[i]!='0'&&mn>=s[i])
mn=s[i],m=i;
deque<char>q;
q.push_back(s[0]);
for(int i=1;i<l;i++)
{
if(i<m)
{
if(s[i]<=q.front())
q.push_front(s[i]);
else
q.push_back(s[i]);
}
else if(i>m)
q.push_back(s[i]);
else if(i==m)
q.push_front(s[i]);
}
while (q.size())
cout<<q.front(),q.pop_front();
cout<<endl;
}
return 0;
}