题目:
You're given a list of n strings a1, a2, ..., an. You'd like to concatenate them together in some order such that the resulting string would be lexicographically smallest.
Given the list of strings, output the lexicographically smallest concatenation.
Input
The first line contains integer n — the number of strings (1 ≤ n ≤ 5·104).
Each of the next n lines contains one string ai (1 ≤ |ai| ≤ 50) consisting of only lowercase English letters. The sum of string lengths will not exceed 5·104.
Output
Print the only string a — the lexicographically smallest string concatenation.
Examples
Input
4 abba abacaba bcd er
Output
abacabaabbabcder
Input
5 x xx xxa xxaa xxaaa
Output
xxaaaxxaaxxaxxx
Input
3 c cb cba
Output
cbacbc
题意:按照字串的长度减小和字典序排列。
解题思路:一开始自己写的cmp是按照长度递减 字典序递增写的 wa了,后来修改为字符串加和的形式才得以a。
ac代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<map>
#include<queue>
#define maxn 50008
using namespace std;
int n;
string str[maxn];
bool cmp(string a,string b)
{
return a+b<b+a;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;i++)
{
cin>>str[i];
}
sort(str,str+n,cmp);
for(int i=0;i<n-1;i++)
cout<<str[i];
cout<<str[n-1]<<endl;
}
return 0;
}