The Smallest String Concatenation
CodeForces - 632CYou'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.
The first line contains integer n — the number of strings (1 ≤ n ≤ 5·104).
Each of the next n lines contains one stringai (1 ≤ |ai| ≤ 50) consisting of only lowercase English letters. The sum of string lengths will not exceed 5·104.
Print the only string a — the lexicographically smallest string concatenation.
4 abba abacaba bcd er
abacabaabbabcder
5 x xx xxa xxaa xxaaa
xxaaaxxaaxxaxxx
3 c cb cba
cbacbc
嗯 题目的意思就是按照字典序列从小到大排序 是字符串
转载来自http://blog.csdn.net/liuke19950717/article/details/51073998
这个是字符串 都是利用sort()92ms
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define maxn 500500
struct node
{
char kk[500];
}str[maxn];
bool cmp(node a,node b)
{
return strcmp(strcat(a.kk,b.kk),strcat(b.kk,a.kk))<0;
}
int main()
{
int n,i;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%s",str[i].kk);
sort(str,str+n,cmp);
for(i=0;i<n;i++)
printf("%s",str[i].kk);
putchar('\n');
return 0;
}
这个是利用string嗯 我也不会还没有学c++
300多ms
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
using namespace std;
int cmp(string a,string b)
{
return a+b<b+a;
}
int main()
{
int n;
scanf("%d",&n);
string x[50005];
for(int i=1;i<=n;i++)
cin >> x[i];
sort(x+1,x+n+1,cmp);
for(int i=1;i<=n;i++)
cout << x[i];
printf("\n");
return 0;
}