09 2013 档案

摘要:有n个数1,2,3,...,n依次进栈,问说出栈的种类数,一直就想不明白怎么得到的递推式f(n)=f(0)*f(n-1)+f(1)*f(n-2)+...+f(n-1)*f(0),同时还有一个问题,就是check一个序列是否是一个合法的出栈序列,当然最简单的方法就是用一个栈去模拟,然而需要占用O(n)的空间,这里有没有O(1)空间的方法来check呢,最后需要做的check貌似就是查找是否存在i<j<k使得aj<ak<ai,想了好久还是没想到方法,有谁知道的可以告诉我哈。 阅读全文
posted @ 2013-09-30 15:50 litstrong 阅读(218) 评论(0) 推荐(0)
摘要:这道题,已知一个数组a,a[i]排好序后位于a[i-k]跟a[i+k]之间,问说该怎么最快地排序。可以转换成多路归并问题,a[0]<a[k+1]<a[2k+2]<a[3k+3]...a[1]<a[k+2]<a[2k+3]<a[3k+4]......a[k]<a[k+(k+1)]<a[2k+(k+2)]<a[3k+(k+3)]...多路归并后的算法复杂度是O(nlogk)。 阅读全文
posted @ 2013-09-26 10:17 litstrong 阅读(329) 评论(0) 推荐(0)
摘要:`x_0^2` 阅读全文
posted @ 2013-09-26 09:25 litstrong 阅读(197) 评论(3) 推荐(0)
摘要:一直想在网页上放进LaTeX布局,但由于是要发布在SAE上,因此有很多的限制。然后在这儿发现了这个好东东,MathJax,非常方便,JS直接可以外链。通过它,我编辑了这个页面,看起来很不错哦。 阅读全文
posted @ 2013-09-25 23:58 litstrong 阅读(333) 评论(4) 推荐(0)
摘要:返回引用遵守的两条准则:1. 不能返回局部变量;2. 不能返回new出的量,因为可能是临时对象。const的用法:1. 基本数据类型的写限制;2. 函数的传入以及返回参数;3. 类内的数据成员以及成员函数的限制;4. 类对象的限制。 阅读全文
posted @ 2013-09-23 10:42 litstrong 阅读(207) 评论(0) 推荐(1)
摘要:参考这,这。在函数调用前,会进行下面的操作:1. 将调用的参数,从右往左push进stack中;2. 将调用函数中被调函数的下一条指令作为返回地址push进stack中;3. 保存栈底指针,即push ebp,将保存栈底寄存器中的值push进stack;4. 将栈底指针更新为栈顶指针,即mov ebp, esp,就是讲被调函数的栈底指针移向调用函数的栈顶位置;5. 栈是从高地址向低地址延伸的,我的理解是,每次的栈分配大小是有限的,从高地址往后放,直接标记内存不可被占用。 阅读全文
posted @ 2013-09-21 15:57 litstrong 阅读(198) 评论(0) 推荐(0)
摘要:结合这,这,就可以看懂了,知道了下面几个事实。1. 一个函数体内,初始时会初始化栈空间,用于存放变量,结束时会释放栈空间;2. return是将值放进eax寄存器,然后再将eax寄存器中的值返回给相应变量,这就可以解释返回指针其实只是返回了一个地址;3. 返回一个局部指针后,函数中的局部数组的内存已经被释放,然后内部的值并没有被清楚,只是标记说要删除,但重新访问时,就会进行清除,如下面的代码,这后面举得那个例子,对于输出的值,第一个是0,后面的是乱的也就解释通了。PS: 下面的运行结果,第一个可以正常返回,第二个返回空格字符。char * Cstr(void){ char a[10] =... 阅读全文
posted @ 2013-09-18 21:45 litstrong 阅读(366) 评论(0) 推荐(0)
摘要:strlen的实现是通过4个字节4个字节进行枚举,然后通过位运算来判断这4个字节中是否有一个字节含有0,这样的话,效率就提高了4倍。这个效率提高是假设a&b&c&d与a&b有差不多效率的前提下。那用8字节8字节来偏移的话,是不是更快呢?32位机上不会,64位机上会提高一倍。因为a&b在64位下会提高一倍,因为32位的寄存器大小是32位的,对于分别MOV高位与低位两次。本来实验a&b&c&d与a&b的速度的,经实验验证,这两个效率确实是差不多的,然后去看汇编,看指令条数,在没有使用-O优化下,指令的条数差别跟运算符号的个数的 阅读全文
posted @ 2013-09-18 20:25 litstrong 阅读(496) 评论(0) 推荐(0)
摘要:来源这里的关于数组指针的题目,参考这,这,经过下面的测试:#include #include using namespace std;void test() { char *a = "abc"; printf("%08x %08x\n", a, a + 1);}void test1() { int **a = new int*[10]; for (int i = 0; i < 10; i++) a[i] = new int[10]; for (int i = 0; i < 10; i++) { printf("%08x %08... 阅读全文
posted @ 2013-09-18 15:19 litstrong 阅读(266) 评论(0) 推荐(0)
摘要:这的题。RT 阅读全文
posted @ 2013-09-17 17:15 litstrong 阅读(121) 评论(0) 推荐(0)
摘要:来自这的题。倒水的问题,因为C杯的量可以很大,所以通过杯A,B可以倒出x*A+y*B这些水,就是在解x*A+y*B=C的线性方程,当gcd(A,B)能整除C时,有解。集线器、交换机、路由器,见这。素数可以通过费马小定理,采用幂模的方法,但可能有Carmichael数这种反例。 阅读全文
posted @ 2013-09-17 16:58 litstrong 阅读(153) 评论(0) 推荐(0)
摘要:这提到抛出引用类异常,可是那个指针在try中就被释放了,后面就出现访问错误了,见下面代码:#include using namespace std;class Ex {private: int *id;public: Ex() { id = new int; } ~Ex() { delete id; id = NULL; } int errorId() { return *id; }};void fun() throw (Ex, Ex*) { Ex *ee = NULL; try { Ex ... 阅读全文
posted @ 2013-09-16 10:57 litstrong 阅读(131) 评论(0) 推荐(0)
摘要:1. 战报交流问题 gossip问题,当n大于等于4时,需要2n-4次交流。2. 群众明星问题 线性依次问下去。3. 货物运输问题 建立线性方程数学模型,转换成求解加权平均数问题。 阅读全文
posted @ 2013-09-14 11:58 litstrong 阅读(141) 评论(0) 推荐(0)
摘要:练的是这套笔试题。1. 模拟一个队列。2. 模拟栈。3. 文件索引结构。4. 最小堆。5. 页式存储系统。6. 逻辑题。7. STL与运算符重载。8. 运算符重载。9. 排序。10. 语言初始化。10. const。11. 计算。12. class与struct。13. 函数指针。14. 函数指针数组。15. 栈。16. 类对象初始化。17. struct大小。18. 类的访问权限。19. stl。20. 链表与算法。21. 语言基础知识。22. 类的初始化列表。23. 指示器变量。 经典的扔鸡蛋与做电梯等问题,见这。24. 概率与指示器变量。25. 排队问题。 参见这,是个Catlan数.. 阅读全文
posted @ 2013-09-13 15:11 litstrong 阅读(184) 评论(0) 推荐(0)
摘要:编程之美的第一个问题,我的机器是双核的,用文中的代码,得到的曲线波动比较大额,受其他进程的影响比较大。文中提到10ms接近windows的调度时间片,如果选得太小,会造成线程被频繁唤醒和挂起,造成内核不稳定。#include "windows.h"#include "stdlib.h"#include "math.h"// 时间片的尺度大概是 10 msvoid control_cpu_percentage(int per) { DWORD sleep_time = 30; //ms DWORD busy_time = per * s 阅读全文
posted @ 2013-09-06 21:23 litstrong 阅读(171) 评论(0) 推荐(0)
摘要:主要参考这篇博文,总结成下面几点:1. 根据操作系统及编译器不同有不同的对齐方式,代码中C的大小在mac下是16,在windows下是24;2. 除了int a:2这种类型的变量,其他变量存放的起始位置都是该变量的整数倍,包括该结构题的初始化内存地址;3. 由于上面这条规则,因此struct的大小是内部最大变量的整数倍;4. struct的嵌套可能被编译器优化成在一个struct中的情况;5. C和D的大小不一样,所以当int a:2以及int b:2这种相同类型的放在一起,可能直接被编译器优化成了int _a_b:4。#include struct B { char a[3];};st... 阅读全文
posted @ 2013-09-05 15:46 litstrong 阅读(129) 评论(0) 推荐(0)
摘要:注意到单词的长度最长100,其实最糟糕复杂度应该能到O(300005*100),需要注意的是在字典树上匹配单词时,一旦不匹配,则后面的就不会匹配,需要break出来(这个害我TLE查了半天,日!),还有,要注意strlen的时候,那个api的复杂度貌似是O(n)的,题目中提到输入数据的不同的test case之间有一个blank line,我理解成输出不同case之间要回车,OJ居然没判成PE,而是判成WA,这两天题写的真蛋疼(吐槽下)。#include #include #include #include #include using namespace std;const int MAXN 阅读全文
posted @ 2013-09-05 10:47 litstrong 阅读(230) 评论(0) 推荐(0)
摘要:1. 每次找剩下序列中的最大值,可以进行pancake sort,时间复杂度是O(n^2);2. 求最少交换次数进行pancake sort的问题是个NP问题,搜索的时候,upper bound是2(n-1)次,而lowwer bound(即至少需要的步数)是剩下的序列中相邻两个元素不是排好序的个数,根据上面的两个bound可以进行剪纸,也可以考虑寻找状态重复情况,不过当n比较大时,就没有办法记录了吧;3. 若Flip的复杂度是O(1),则可以使用插入排序的算法,遍历序列中的元素,然后在排好序的序列中二分查找后,通过几次Flip操作将序列调整成有序的,复杂度是O(nlgn)。 阅读全文
posted @ 2013-09-04 17:17 litstrong 阅读(441) 评论(0) 推荐(0)
摘要:B.Maximal Area Quadrilateral题意:在N个点中构建四边形,使得四边形面积最大,且不自交。分析:不自交四边形可以剖分成两个三角形,因此可以在O(N^2)内枚举对角线,然后用O(N)寻找离对角线最远的两侧的点。其实这题最快应该能到O(NlgN),求出点集的凸包,然后在凸包上转一下。C.Tourist Problem题意:统计N!种路线的距离的均值。分析:统计每段出现的次数,即统计(i,j)出现的次数,即统计(i_small, j_large)满足i_small<=i且j<=j_large下,出现的次数。D.Bubble Sort Graph题意:给定一个序列a 阅读全文
posted @ 2013-09-03 23:22 litstrong 阅读(231) 评论(0) 推荐(0)
摘要:A Simple Problem with Integers每次将区间向下更新,或是用之前的方法,统计当前节点到父节点处的覆盖数目。#include #include using namespace std;const int MAXN = 100005;typedef long long int64;int d[MAXN];class SegNode {public: int L, R; int64 c, sum; int64 get_c() { return c * (R - L + 1); } void log(const char *info) { ... 阅读全文
posted @ 2013-09-03 23:06 litstrong 阅读(154) 评论(0) 推荐(0)