1198. Substring
Constraints
Time Limit: 1 secs, Memory Limit: 32 MB
Description
Dr lee cuts a string S into N pieces,s[1],…,s[N].
Now, Dr lee gives you these N sub-strings: s[1],…s[N]. 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.
Input
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.
Output
The output of each test is the lexicographically smallest S. No redundant spaces are needed.
Sample Input
1 3 a ab ac
Sample Output
aabac
bool
cmp(
const
stringa,
const
stringb)
11.
{
12.
return
a+b< b+a;
13.
}
// Problem#: 1198
// Submission#: 2649000
// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/
// All Copyright reserved by Informatic Lab of Sun Yat-sen University
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(const string a, const string b)
{
return a+b < b+a;
}
int main()
{
int T;
cin >> T;
while (T--)
{
int n;
cin >> n;
string sub[n];
for(int i = 0; i < n; i++)
cin >> sub[i];
sort(sub, sub+n, cmp);
for(int i = 0; i < n; i++)
cout << sub[i];
cout << endl;
}
}
// Problem#: 1198
// Submission#: 2994788
// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/
// All Copyright reserved by Informatic Lab of Sun Yat-sen University
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
string min(const string a, const string b)
{
return a < b ? a : b;
}
int main()
{
int T;
cin >> T;
while (T--)
{
int n;
string ans = "";
cin >> n;
string sub[1000];
for (int i = 0; i < n; i++)
cin >> sub[i];
sort(sub, sub + n);
string total = "";
for (int i = 0; i < n; i++)
{
ans += sub[i];
total += sub[i];
}
while (next_permutation(sub, sub + n))
{
total = "";
for (int i = 0; i < n; i++)
{
total += sub[i];
}
ans = min(ans, total);
}
cout << ans << endl;
}
}