Sicily 1198 Substring
2015-09-11 15:58
363 查看
1.问题内容:
题目链接
2.问题分析:
可能大家一开始看这道题觉得很水,就是将那些字符串排序然后连接起来就行啦!记得大一我就是这样。提交之后发现过不了,后来再仔细想想发现并不是我想的那样。
开始我想用贪心算法的思路来解这道题(贪心算法简介),然而这个思路其实就有问题,通过贪心算法求得的子过程最优解并不能逐步求得全局的最优解。
考虑一组测试就懂了:
a, aba, ab (显然:a < ab < aba,结果不是:aababa,而是:aabaab)
3.解题思路:
那么如何解呢?其实就通过排序就可以了,只不过排序的比较因子,不是默认的字典序,而是这个:return (s1 + s2 < s2 + s1)。请各位细看,这个排序因子排序的结果就是:a < aba < ab(见上面的实例),然后再一前后连接起来就是正解(aabaab)了。
4.参考代码:
5.备注:
见代码中注释部分,可以直接引用algorithm里的sort函数(需要传入我们自定义的排序因子)
关于sort函数的详细信息(c++官网介绍)
题目链接
2.问题分析:
可能大家一开始看这道题觉得很水,就是将那些字符串排序然后连接起来就行啦!记得大一我就是这样。提交之后发现过不了,后来再仔细想想发现并不是我想的那样。
开始我想用贪心算法的思路来解这道题(贪心算法简介),然而这个思路其实就有问题,通过贪心算法求得的子过程最优解并不能逐步求得全局的最优解。
考虑一组测试就懂了:
a, aba, ab (显然:a < ab < aba,结果不是:aababa,而是:aabaab)
3.解题思路:
那么如何解呢?其实就通过排序就可以了,只不过排序的比较因子,不是默认的字典序,而是这个:return (s1 + s2 < s2 + s1)。请各位细看,这个排序因子排序的结果就是:a < aba < ab(见上面的实例),然后再一前后连接起来就是正解(aabaab)了。
4.参考代码:
#include<iostream>
07.
#include<string>
08.
09.
using
namespace
std;
10.
11.
bool
cmp(string s1, string s2) {
12.
return
(s1 + s2 < s2 + s1);
13.
}
14.
15.
int
main() {
16.
int
test_case;
17.
cin >> test_case;
18.
19.
while
(test_case--) {
20.
int
num;
21.
cin >> num;
22.
string str[num];
23.
for
(
int
i = 0; i < num; i++) {
24.
cin >> str[i];
25.
}
26.
27.
for
(
int
i = 0; i < num; i++) {
28.
for
(
int
j = i + 1; j < num; j++) {
29.
if
(!cmp(str[i], str[j])) {
30.
string temp = str[i];
31.
str[i] = str[j];
32.
str[j] = temp;
33.
}
34.
}
35.
}
36.
/*----------
37.
in a simpler way:
38.
include algorithm
39.
sort(str, str+num, cmp);
40.
------------*/
41.
string res =
""
;
42.
for
(
int
i = 0; i < num; i++) {
43.
res += str[i];
44.
}
45.
46.
cout << res << endl;
47.
}
48.
}
5.备注:
见代码中注释部分,可以直接引用algorithm里的sort函数(需要传入我们自定义的排序因子)
关于sort函数的详细信息(c++官网介绍)
相关文章推荐
- 动易2006序列号破解算法公布
- 文件遍历排序函数
- C#选择排序法实例分析
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- C#实现Datatable排序的方法
- 超大数据量存储常用数据库分表分库算法总结
- SQLSERVER的排序问题结果不是想要的
- Windows Powershell排序和分组管道结果
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- C#通过IComparable实现ListT.sort()排序
- C#选择法排序实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- SQL学习笔记四 聚合函数、排序方法
- C#实现的算24点游戏算法实例分析
- C#对list列表进行随机排序的方法
- 一根网线内的8根线哪4根是传输数据的,哪四根是防干扰的