Substring
时间限制(普通/Java) : 2000 MS/ 6000 MS 运行内存限制 : 65536 KByte
总提交 : 201 测试通过 : 49
总提交 : 201 测试通过 : 49
比赛描述
Dr lee cuts a string S into N pieces , s[1],……,s[N].
Now , Dr lee gives you these N sub-string:s[1]…,s[N].T there might be several possibilities that the string S could be . For example , if Dr.lee gives you three sub-strings{“a”,”ab”,”ac”},the string S could be “aabac”,”aacab”,”abaac”,…
Your task is to output the lexicographically smallest S.
Now , Dr lee gives you these N sub-string:s[1]…,s[N].T there might be several possibilities that the string S could be . For example , if Dr.lee gives you three sub-strings{“a”,”ab”,”ac”},the string S could be “aabac”,”aacab”,”abaac”,…
Your task is to output the lexicographically smallest S.
输入
The first line of the input is a positive integer T.T is the number of the test cases followed.
The first line of each test case is a positive integer N(1<=N<=8) which represents the number of sub-strings.After that,N lines followed. The i-th line is the i-th sub-string s[i].Assume that the length of each sub-string is positive and less than 100.
输出
The output of each test is the lexicographically smallest S.No redundant spaces are needed.
样例输入
1
3
a
ab
ac
样例输出
aabac
题目来源
第九届中山大学程序设计竞赛预选题
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
int T,N,i;
string s,min_s,ss[8];
vector<string>::iterator it;
cin>>T;
while(T--){
cin>>N;
min_s = "~";
for(i=0;i<N;++i){
cin>>ss[i];
}
sort(ss,ss+N);
do{
s = ss[0];
for(i=1;i<N;++i){
s += ss[i];
}
if(min_s>s){
min_s = s;
}
}while(next_permutation(ss,ss+N));
cout<<min_s<<endl;
}
}