数セグメントの集合を考えると、あなたは彼らから最小の数を回復することになっています。例えば、{32、321、3214、0229、87}が与えられると、我々はそのような組み合わせの異なる順序に対して32-321-3214-0229-87又は0229-32-87-321-3214ような多くの数を回復することができこれらのセグメント、および最小数は0229-321-3214-32-87あります。
入力仕様:
各入力ファイルには、1つのテストケースが含まれています。各ケースは、正の整数与える N(≤)、続いて N個のセグメント。各セグメントは、せいぜい8桁の負でない整数を含んでいます。行のすべての数字は、スペースで区切られます。
出力仕様:
各テストケースのために、1つのラインの最小数を印刷します。最初の桁がゼロであってはならないことに注意してください。
サンプル入力:
5 32 321 3214 0229 87
サンプル出力:
22932132143287
1の#include <iostreamの> 2の#include < ストリング > 3の#include <ベクトル> 4の#include <アルゴリズム> 5 使って 名前空間STDを、 6 // 排序问题 7 int型N。 8ベクトル< ストリング > V、TEMP。 9 列 RES = ""、STR = "" ; 10 ボイド permuteDFS(int型、ベクトル<UをBOOL >&訪問)// 使用DFS 11 { 12 であれば(U ==v.size()) 13 { 14 のための(自動:TEMP) 15 STR + = A。 16の RES = resを> STR?STR:RES。 17 STR = "" ; 18 リターン; 19 } 20 のための(int型 iは= 0 ; iがNを<; ++ I) 21 { 22 であれば([I] ==訪れ真)続けます。 23 訪問[I] = 真; 24 temp.push_back(V [I])。 25 permuteDFS(私は+ 1を訪問、); 26 temp.pop_back()。 27 訪問[I] = 偽; 28 } 29 } 30 31 空隙 permutex(INT U)// 使用递归 32 { 33 であれば(U == v.size()) 34 { 35 のための(自動:V) 36 STR + = A。 37の RES = resを> STR?STR:RES。 38 STR = "" ; 39 } 40 のための(INT I = U、iがNを<; ++ I) 41 { 42 スワップ(V [i]は、V [U])。 43 permutex(I + 1 )。 44 スワップ(V [i]は、V [U])。 45 } 46 } 47 48 空隙ソート()// 使用排序法则 49 { 50 ソート(v.begin()、v.end()、[](文字列、文字列 B){ 返す + B <Bを+ ;}); 51 のRES = "" ; 52 のための(自動A:V) 53の RES + = A。 54 } 55 56 INT ()主 57 { 58 CIN >> N。 59 v.resize(N)。 60 ベクトル< ブール >訪問(N、偽); 61 のために(int型 I = 0 ; iがNを<; ++ I) 62 { 63 CIN >> V [i]は、 64の RES + = V [i]は、 65 } 66 // permutex(0)。 67 //permuteDFS(0、訪問)。 68 ソート()。 69 ながら(!res.empty()&& RES [ 0 ] == ' 0 ' ) 70 res.erase(0、1 )。 71 であれば(res.size()== 0)COUT << 0 。 72 COUT << RES << ENDL。 73 リターン 0 。 74 }