
ACM和算法
文章平均质量分 71
ATField
目前在微软公司Common Language Runtime .NET Framework 的.NET Native Tool Chain Team工作,目前主要负责开发.NET Native相关技术
展开
-
ACM UVa 算法题100, 101, 103, 104, 112, 10405解法
下面是我以前在我的Live Space的Blog上面写的一些ACM算法题目的解法,一次性贴出来供大家参考,也是对自己研究的一个记录。以后我做了新的题目会在优快云 Blog和我的Live Space Blog上面同时发布。最近决定做一些ACM的题目来提高一下自己的算法的水平。N年(n>=6)没做这类型的题目了,手有点生疏了。网上有不少ACM的题目和Online Judge,UVa算是其中比原创 2006-12-01 22:41:00 · 4985 阅读 · 1 评论 -
一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
看上去似乎任何已知的算法都无法做到,如果谁做到了,那么所有的排序方法:QuickSort,ShellSort,HeapSort,BubbleSort等等等等,都可以扔掉了,还要这些算法干吗阿,呵呵。不过实际上,在数字范围有限制的情况下,是有一个这样的算法的,只需要用一个数组记录每个数字出现次数就可以了。假定你的数字范围在0到65535范围之内,定义一个数组count[65536](这个原创 2007-04-28 22:59:00 · 15172 阅读 · 13 评论 -
ACM UVa算法题209 Triangular Vertices的解法
有一段时间没有做ACM算法题目了,今天正好有空便随便挑了209题来做做:ACM UVa算法题#209题这道题有几个要点:1. 给定坐标系坐标系很容易定,我采用的是第一个点为(0, 0)点,X方向差别为2个单位,Y方向差别为1个单位,点之间的距离,也就是LEN为1个单位,这样便于计算。注意我用的不是实际长度,而是抽象的单位,这个单位在不同方向上面意义不一样,否则很容易通过三角形相关公原创 2007-05-03 00:49:00 · 5019 阅读 · 0 评论 -
ACM UVa 算法题 #202 - Repeating Decimals的解法
题目的Link:ACM UVa #202 - Repeating Decimals很简单,属于大家都可以做的题目,也就是送分题 :) 当逐步作除法的时候如果出现了重复的商,那么cycle必然在这个两个重复的商之间,道理我就不多啰嗦了,小学数学嘛一般的方法是纪录所有商,每算出一个新的便顺序查找看该商是否出现过,复杂度为O(n^2)。为了提高速度,注意到题目中限制除数和被除数代码如下:原创 2007-01-29 22:39:00 · 5756 阅读 · 1 评论 -
ACM UVa 算法题 #110 - Meta-Loopless Sort 的解法
题目的Link在这里:ACM UVa #110 - Meta-Loopless Sort这道题的关键在于生成全排列的同时也需要确定如何进行比较可以得到此种全排列。生成全排列的方法有很多,但是有一种方法最适合此题:假设我们获得了1~n的全排列,如何获得1~n+1的全排列?对于每个1~n的全排列x(1), x(2), ... x(n),可以看作该排列中有n+1个空位,即,, x(1), , x原创 2007-01-28 13:13:00 · 2655 阅读 · 0 评论 -
如何求最长连续公共子序列和最长连续子字符串
前段时间研究过如何求最长连续公共子序列和最长连续子字符串,以前一个同学正好问起来,这里贴出来解法:问题的关键还是如何定义子问题,假设有:Xm = x1 x2 x3 ... xmYn = y1 y2 y3 ... yn1. 最长公共子序列(不必连续)定义f(m, n)为Xm和Yn之间最长的子序列的长度于是有f(m, 0) = f(0, m) = 0如果xm != yn原创 2007-01-28 13:05:00 · 8248 阅读 · 8 评论 -
ACM UVa 算法题 #108 - Maximum Sum的解法
题目的Link在这里:ACM UVa 108 - Maximum SumUVa 507和108其实是相关的。507是可以看作是一维的Maximum Interval Sum问题,而本题则是任何一个n*m的Rectangle:a11 a12 ... a1na21 a22 ... a2n.....................am1 am2 ... amn可以看作一个一维的数组,原创 2007-01-27 12:06:00 · 5116 阅读 · 0 评论 -
ACM UVa 算法题 #507 - Jill Rides Again的解法
题目的Link在这里:ACM UVa 507 - Jill Rides Again本质上来说,本题是一个Maximum Interval Sum问题,也就是求最大连续序列。一般的做法需要o(n^2)的时间,其实有一个简单的O(n)复杂度的解法:从左到右逐步累加,记录每次累加之后的最大值,假如累加值直观来说,这样做把整个序列分为(A1, n1), (A2, n2)....(Am, n原创 2007-01-27 11:56:00 · 2606 阅读 · 0 评论 -
ACM UVa 算法题 #201 - Squares解法
题目的内容在这里:#201 - Squares解法我所能想到的有两种,先说慢一些的:1. 较慢的算法,复杂度O(N^4)我一开始想到的算法如下:对于每个点,可以从该点出发,把该点看成矩形的左上角,检查是否存在大小从1到N的矩形(当然不可以超过边界),检查是否存在这样的矩形每一次需要花上O(n)的时间(检查四条边,可以优化一些,但是复杂度必为O(n)),因此总的复杂度是O(N^4)2原创 2007-01-26 00:27:00 · 2816 阅读 · 0 评论 -
ACM UVa 算法题 #200 - Rare Order的解法
题目链接在这里:ACM UVa #200 - Rare Order本题的解法相对简单:对于输入的所有字符串,只需两两比较,每个字符串可以获得一个不等关系(或者无法获得),如:ZXYZXW可以知道Y 按照此种方法依次两两比较,可以获得多个不等关系。当有了不等关系之后,下一步是如何根据不等关系得到这些字符的Order。最有效的方法是拓扑排序(Topology Sort):首先对原创 2007-01-23 23:05:00 · 3794 阅读 · 0 评论 -
ACM UVa 116 - Undirectional TSP的解法
ACM UVa 116 - Undirection TSP这一道题解决关键在两处:1. 得到最小路径定义每一个位置(x,y)的最小路径权值为p(x,y),于是有p(x,y) = min { p(x-1, y) + p(x, (y + t + n) % n) | t = -1, 0, 1 }按照动态规划的方法,从左往右或者从右往左以列为单位开始算即可。从左往右的话,最后一列的最小原创 2006-12-12 00:03:00 · 4127 阅读 · 0 评论 -
另一道看上去很吓人的面试题:如何交换a和b两个整数的值,不用额外空间 (Rev. 2)
这个题貌似完全颠覆一般的Logic:交换两个整数需要一个额外的空间用于保存:t = b;b = a;a = t;粗看上去似乎没有办法,但是仔细想一下,既然不能用额外的空间,那么能用的方法就只有数学方法,也许有效,那么第一个想法就是用A+b看看,稍微想一下就可以得到下面这个解法: a = a + b; b = a - b; a = a - b;还有更绝的(由DxZ网友原创 2007-04-28 23:12:00 · 5972 阅读 · 8 评论