南邮-substring

                       Substring

时间限制(普通/Java):2000MS/6000MS          运行内存限制:65536KByte
总提交:176            测试通过:40

描述

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.

输入

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 <cstring>
#include <vector>
#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--)
	{
		vector<string>s;
		int n;
		cin>>n;
		string temp;
		while(n--)
		{
			cin>>temp;
			s.push_back(temp);
		}
		sort(s.begin(),s.end(),cmp);
		for(int i=0;i<s.size();i++)
			cout<<s[i];
		cout<<endl;
	}
	return 0;
}
大家如果对此处的sort()函数不太明白的话,可以借助下面的例子:
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
bool cmp(const string a, const string b)
{
    return a +b < b + a;
}
int main()
{
    string a[5];
    for (int i = 0 ; i< 5; i++)
    cin >> a[i];
        sort(a,a+5, cmp);
    for (int i = 0 ; i< 5; i++)
    cout << a[i] << endl;
}           
/* 测试例祝 :
     a, ab , ac,  abb , acc;     
输出: a, ab, abb , ac, acc;
*/
//这个算法可以应用到 求最小字符串 , 或最大字符串(通过修改  cmp 来实现)


南邮-substring

上一篇:Huffman 编码树


下一篇:字符编码转换概要设计