摘要: 2255:Tree Recovery题目分析:使用前序序列和中序序列构造后序序列的题。当时面微软实习生的时候还问过这个。前序的第一个节点就是后序的最后一个节点,且该节点把中序序列划分成左右两个子树。中序的这两个子树对应着前序的两个子树,他们的长度分别相等。代码如下:#include #include using namespace std; string getPost(string pre,string in){ if(pre.length() == 0)return "";//注意边界条件 if(pre.length() == 1)return pre; cha... 阅读全文
posted @ 2012-10-03 22:15 moonswap 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 2262:Goldbach's Conjecture题目分析:一百万个数,开辟一个数组用于标识是否是素数,用bool型表示,总内存小于1M,然后查表即可。建立素数表,对每个素数,把该素数的所有倍数所在的位置都置为false。代码如下:1048kB 50ms688 B#include int main(){ bool primeMap[1000000]; for(int i=1; i<1000000; i++){ primeMap[i] = true; } for(int i=2; i<500000; i++){ if(prime... 阅读全文
posted @ 2012-10-03 21:57 moonswap 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 1083:Moving Tables题目分析:初看似乎像贪心算法中的活动安排问题,不同的是这里的所有活动(相当于搬桌子的距离)都需要安排。有四种贪心策略:最短优先,最长优先,最早开始时间优先,最早结束时间优先。活动安排问题采用的是最早结束时间优先。此题要求所有活动都被安排,直观的想同时进行的活动相互之间的间隔最小最好。可以证明最早开始时间优先满足要求。证明:令S = P1,P2,P3,P4,P5是满足最早开始时间优先的一轮安排。即P1是所有活动中最早开始的,P2是在P1结束之后才开始的所有活动中最早开始的,依次类推。假设存在最优解A不包含上述S的安排。我们要证明存在一个等价的最优解A‘包含上述 阅读全文
posted @ 2012-10-03 20:11 moonswap 阅读(198) 评论(0) 推荐(0) 编辑