摘要: 题目链接:http://poj.org/problem?id=2299 给你一个升序列,然后要你只能交换相邻的两个数把这个序列按升序排列,求最少需要交换多少次。 不管怎么样,只要存在ai>aj(i<j),那么这两个数之间必须要交换。任意两个数不影响其它数之间的大小位置关系,所以可以看出就是求逆序对数量。求逆序对数量有很多方法,树状数组或者线段树优化等,但是用合并排序的方法更方便,即在合并左儿子和右儿子的时候,统计左儿子比右儿子大的数的个数即可,复杂度O(log(n))。合并排序版: 1 //STATUS:C++_AC_391MS_3688KB 2 #include<stdio 阅读全文
posted @ 2012-12-29 11:30 zhsl 阅读(322) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1226 买一送一的题目,稍微修改POJ3450或POJ3080的代码就可以了。不过C++和G++不支持strrev()函数,因为strrev()不是ANSI C的语法,改为_strrev()就可以了。 1 //STATUS:C++_AC_0MS_172KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 #include<iostream> 7 #incl 阅读全文
posted @ 2012-12-29 11:14 zhsl 阅读(189) 评论(0) 推荐(0) 编辑