ACM解题报告 XOJ 1004

       什么?不知道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的,说是数据预处理过了,还是不明白。不过想想,这个节约这么多时间,不了解下,实在是对不起这个方法的存在了!大笑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值