题目链接:http://codeforces.com/problemset/problem/632/C
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.
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.
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
题解:
1.设有两个字符串a和b:求他们最小字典序的组合,那么只有两种情况 : a+b 和 b+a,即取字典序小的那个。
2.字符串个数由两个推广到n个,那么即相当于在原基础上插入新的字符串,使得字典序最小。所以这是一个排序的过程。
代码如下:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const double eps = 1e-6;
const int INF = 2e9;
const LL LNF = 9e18;
const int mod = 1e9+7;
const int maxn = 5e4+10;
string s[maxn];
int n;
bool cmp(string a, string b)
{
return a+b<b+a;
}
int main()
{
cin>>n;
for(int i = 1; i<=n; i++)
cin>>s[i];
sort(s+1,s+1+n,cmp);
for(int i = 1; i<=n; i++)
cout<<s[i];
cout<<endl;
return 0;
}

本文介绍了一个CodeForces上的编程问题解决方案,该问题要求将一组字符串按字典序最小的方式进行拼接。通过自定义比较函数实现字符串排序,最终输出最小字典序的字符串。

被折叠的 条评论
为什么被折叠?



