思路 标记最小的最后的位置 放在第一位
标记位置之前按left值小的左方大的右方
标记位置之后按顺序放在最后
不多说先贴上销毁内存的wa代码
销毁内存的wa代码
1 #include<cstdio> 2 #include<map> 3 #include<vector> 4 #include<stack> 5 #include<iostream> 6 #include<algorithm> 7 #include<cstring> 8 #include<cmath> 9 #include<queue> 10 #include<cstdlib> 11 #define PI acos(-1.0) 12 using namespace std; 13 typedef long long ll; 14 const ll mood=1e9+7; 15 const double eps=1e-9; 16 const int N=1e4+10; 17 const int MAXN=510; 18 //queue<char>q; 19 20 char sh[120]; 21 int main() 22 { 23 int ci; 24 scanf("%d",&ci); 25 getchar(); 26 while(ci--) 27 { 28 string s; 29 int len=0; 30 memset(sh,0,sizeof(sh)); 31 char tem=getchar(); 32 char mn='9'+1; 33 int mn_pos=0; 34 while(tem!=' '&&tem!=' ') 35 { 36 if(mn>=tem&&tem!='0') 37 { 38 mn=tem; 39 mn_pos=len; 40 } 41 sh[len++]=tem; 42 // q.push(tem); 43 tem=getchar(); 44 } 45 char lef='9'+1; 46 for(int i=0;i<len;i++) 47 { 48 if(i==mn_pos) 49 { 50 s=sh[i]+s; 51 } 52 else{ 53 if(i>mn_pos) s=s+sh[i]; 54 else if(sh[i]<=lef) 55 { 56 s=sh[i]+s; 57 lef=sh[i]; 58 } 59 else{ 60 s=s+sh[i]; 61 } 62 } 63 64 } 65 // cout<<s<<endl; 66 67 68 cout<<s<<endl; 69 s.clear(); //可省略 70 } 71 return 0; 72 }