摘要:   http://poj.org/problem?id=3067 方法: 求交点个数,我们可以将其转化为求逆序数问题。 两线段(x1,y1)、(x2,y2)相交当且仅当(x1-x2)*(y1-y2)<0 对所有输入线段按x排序,对同x的线段按y排序。利用排序后的输入计算逆序数。 数组元素a[i]记录y为i的线段的个数。依次读入排序后的线段,每取一个y值,++a[y],并计算 区间... 阅读全文
posted @ 2010-11-08 19:27 Allen Sun 阅读(299) 评论(0) 推荐(0) 编辑
摘要:   http://poj.org/problem?id=2739   方法: 埃氏筛法得到N以下的所有素数,复杂度n*lglgn 利用积累数组计算数组中连续元素的和   Description Some positive integers can be represented by a sum of one or more consecutive prim... 阅读全文
posted @ 2010-11-08 19:24 Allen Sun 阅读(568) 评论(0) 推荐(0) 编辑
摘要:   http://poj.org/problem?id=2593   Maximum Sequence 求数组两段不重叠的连续子数组的最大和 详见2479   Description Give you N integers a1, a2 ... aN (|ai| <=1000, 1 <= i <= N). You should outpu... 阅读全文
posted @ 2010-11-08 19:20 Allen Sun 阅读(264) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2499 root为(1,1),节点(a,b)的左孩子为(a+b,b),右孩子为(a,a+b)。求从root到给定节点(a,b)所走过的左右路径各为多少 方法:不断优化算法的经典例子,类似于求最大公约数TLE了几次才逐渐改进的算法:TLE-->0ms详见注释 Description BackgroundBinary trees are a... 阅读全文
posted @ 2010-11-08 19:17 Allen Sun 阅读(1073) 评论(0) 推荐(0) 编辑
摘要:   http://poj.org/problem?id=2479 方法:两次dp+一次扫描,复杂度3*n 基于求最大连续子数组的线性dp算法 对数组从前往后各做一次O(n)的dp,求得maxsofar[0][0...n-1],再数组从后往前各做一次O(n)的dp,求得maxsofar[1][0...n-1], 再扫描一遍maxsofar求得maxsofar[0][i-1] + maxs... 阅读全文
posted @ 2010-11-05 19:45 Allen Sun 阅读(749) 评论(0) 推荐(0) 编辑
摘要:   http://poj.org/problem?id=2388   方法: 找中位数 一般来讲当数不是很多时可使用patition的方法,复杂度n 这里的方法适用于大量数据的情况,此时内存无法放下所有数。通过扫描大概lgn次数据即可找到中位数,复杂度nlgn 利用了中位数的性质:其左右两边的数据量相同   Description FJ is survey... 阅读全文
posted @ 2010-11-05 19:30 Allen Sun 阅读(609) 评论(0) 推荐(0) 编辑
摘要:   http://poj.org/problem?id=2352   方法:复杂度N*O(log Max) 树状数组Binary Indexed Tree,具体见3321 求得常变二维平面上(0,0)到(x,y)所形成的矩形中点的个数 由于内存限制,所以只能考虑用一维的BIT来解决此问题。因此需要将输入数据先按y排序,再对 同y的x排序,对这样排序好的数据依次进行处理... 阅读全文
posted @ 2010-11-05 19:26 Allen Sun 阅读(406) 评论(0) 推荐(0) 编辑
摘要:   http://poj.org/problem?id=2299   方法: 利用merge sort求逆序数,复杂度nlgn 如果比较每一对儿数(或使用bubble sort),复杂度为n^2,太慢 对于一对儿逆序对儿,有三种情况:两数都在数组左半边,两数都在数组右半边,两数分别在左右两个半边。 由于Merge时两个半边都为sorted,所以只会出现第三种情况。 计算... 阅读全文
posted @ 2010-11-05 19:22 Allen Sun 阅读(351) 评论(0) 推荐(0) 编辑
摘要:   http://poj.org/problem?id=2262   方法: 首先筛得1000000以下的素数表,复杂度N*lglgN 再用测试值减去素数表中从小到大的值,判断如果该值是素数,则不需要再接着找了,直接输出。复杂度N 注意点: 1、由于N很大,所以筛素数在计算i*i时可能会超过int的范围,所以需要采用__int64 2、需要符合要求的a,b使得a+b=c的... 阅读全文
posted @ 2010-11-05 19:19 Allen Sun 阅读(362) 评论(0) 推荐(0) 编辑
摘要:   http://poj.org/problem?id=2255   方法: 根据preorder和inorder构造postorder 例如preorder:DBACEGF   inorder:ABCDEFG            ... 阅读全文
posted @ 2010-11-05 19:16 Allen Sun 阅读(547) 评论(0) 推荐(0) 编辑