随笔分类 -  ACM_数据结构

摘要:题目链接:http://poj.org/problem?id=2352 水题。。。 1 //STATUS:C++_AC_204MS_696KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 #include<iostream> 7 #include<string> 8 #include<algorithm> 9 #include<vector>10 #include<queu 阅读全文
posted @ 2013-03-30 11:13 zhsl 阅读(207) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=2155 比较典型的二维线段树题目,直接永久更新即可,在询问的时候,要询问每个x区间的子树,复杂度O(log(n)^2)。 也可以用树状数组搞,推荐看NOI 2009武森《浅谈信息学竞赛中的“0”和“1”》。 1 //STATUS:C++_AC_907MS_16144KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 //#include<math.h> 6 #include<iostream> 阅读全文
posted @ 2013-03-13 22:14 zhsl 阅读(302) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=3253 题目大意是,把一块长木板割成n快给定长度的木板,每次的花费为当前模板的长度,求最小的花费。逆向求解即可,贪心的思想,每次取两块木板长度最小的,花费为量长度之和,然后把新的长度加进去,操作n-1次,就是一个huffman树的构造过程。然后用优先队列搞之。 1 //STATUS:C++_AC_16MS_348KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 # 阅读全文
posted @ 2013-01-06 10:33 zhsl 阅读(311) 评论(0) 推荐(0)
摘要:题目链接: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 阅读(332) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=3928 题目大意是:有n个人按顺序住在一条街上,给定每个人的乒乓球的技术水平值。现在他们要切磋球技,两两切磋,需要找一名裁判,这名裁判的球技水平必须在他们之间,而且他必须居住在他们之间。问一共有多少种情况。 如果直接枚举任意两个数,复杂度O(n^2),此题数据达到20000,铁定TLE。我们可以反过来枚举裁判,那么只要O(n)。接下来就是在[0,i-1]比num[i]小的数的个数,这里是关键,直接遍历的话也会TLE。这里并没有要求动态访问,只要求出结果即可,因此可以离线操作,用线段树优化。具体做法就是,从0开始遍历数列,依... 阅读全文
posted @ 2012-12-27 00:05 zhsl 阅读(353) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=2785 强烈鄙视自己啊,开始以为数据简单,结果用map标记一下,TLE了,然后改成动态化的hash,结果还是TLE!后来无奈改成静态化的hash才AC!至于动态化的hash超时,应该是申请内存的时候占用了太多的CPU的资源吧。这题sort+二分也可以做,但是map就不能搞了,可见STL的效率啊! 1 //STATUS:C++_AC_4844MS_132304KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #in 阅读全文
posted @ 2012-12-22 16:00 zhsl 阅读(312) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1896 优先队列搞就可以了。 1 //STATUS:G++_AC_234MS_1360KB 2 #include<stdio.h> 3 #include<math.h> 4 #include<stdlib.h> 5 #include<string.h> 6 #include<string> 7 #include<queue> 8 using namespace std; 9 #define pii pair<int,int 阅读全文
posted @ 2012-11-25 20:04 zhsl 阅读(216) 评论(0) 推荐(0)