您的位置:首页 > 其它

ACM解题报告 XOJ 1004

2012-07-27 16:51 190 查看
什么?不知道XOJ是哪个?没关系,http://acm.xmu.edu.cn/ 厦门大学的OJ,比起POJ、ZOJ这两个大而全的ACM OJ来说,厦门大学的OJ题目少了很多,但是有个好处就是,作为用于算法课的辅助系统,上面有很多原封不动的算法书上的题目。

这不,我就来介绍下1004 http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1004 这个排序题了。

前面的1003也是排序,那个是各种算法都可以上了,什么冒泡、选择、堆、快、归、基数、统计

……因为数据集很小,不怕超时。

本题就明确要求用O(nlogn)的算法来写了,嗯,基数排序的复杂度不叫这个。冒泡什么的一边凉快去。

第一次尝试,在贡献了三个CE

……后,我的快排终于通过的编译,回复我的结果——TLE

,好吧,我很水的没用随机化,直接拿起a[l]就当令箭了……


不知道为什么……我的第二次尝试毫无改变,只是把代码挤得密密麻麻的……仍是TLE。

第三次尝试,现在一眼就看出问题所在,尝试了三者选一的方法,可是我的pivot 不等于a[x],而是pivot = l, r, (l+r)/2三个中的一个去了……很干脆的WA……

第四次尝试,在听取了教训和指点之后,我知道要用随机化的方法了,可是当时不知道随机是干嘛的,我的pivot = a[rand],没问题了,但是辅助空间(a[0])的值仍是a[low],结果又是WA……

后面,归并也超时了——我至今仍不知道AC的归并代码。

在我很光棍地贡献了5次CE,4次TLE,2次WA后,我终于用堆排把本题AC了……

后面又有两次用了随机化后仍超时的情况,以至于我都怀疑本题是不是快排过不了。

基数排序过了

,标准库函数qsort也过了。

最后,是在今年2月份的时候,才用随机化的qsort成功水过。也不知道是不是while和for的区别……

总结:

标准库、堆排和随机化快排、基数排序(这个代码不是自己写的,看都看不懂)都可以AC。

除基数排序外,另外几个的时间都在2200MS左右,基数排序……5000MS.

最快的是400多MS的,说是数据预处理过了,还是不明白。不过想想,这个节约这么多时间,不了解下,实在是对不起这个方法的存在了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐