摘要: 题意:有n个等长的string(设string的长度为m),string中的字符从'A'到'Z',容许对m列执行稳定的排序操作,问说是否能通过这m种操作将这n个string调整成对应的顺序。题解:为了保证区间[0, n)有序,考虑最后一个操作,该操作使得某一列在区间[0, n)中是有序的,这个操作将... 阅读全文
posted @ 2014-05-20 21:43 litstrong 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 有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 阅读(207) 评论(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 阅读(322) 评论(0) 推荐(0) 编辑
摘要: `x_0^2` 阅读全文
posted @ 2013-09-26 09:25 litstrong 阅读(179) 评论(3) 推荐(0) 编辑
摘要: 一直想在网页上放进LaTeX布局,但由于是要发布在SAE上,因此有很多的限制。然后在这儿发现了这个好东东,MathJax,非常方便,JS直接可以外链。通过它,我编辑了这个页面,看起来很不错哦。 阅读全文
posted @ 2013-09-25 23:58 litstrong 阅读(322) 评论(4) 推荐(0) 编辑
摘要: 返回引用遵守的两条准则:1. 不能返回局部变量;2. 不能返回new出的量,因为可能是临时对象。const的用法:1. 基本数据类型的写限制;2. 函数的传入以及返回参数;3. 类内的数据成员以及成员函数的限制;4. 类对象的限制。 阅读全文
posted @ 2013-09-23 10:42 litstrong 阅读(196) 评论(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 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 结合这,这,就可以看懂了,知道了下面几个事实。1. 一个函数体内,初始时会初始化栈空间,用于存放变量,结束时会释放栈空间;2. return是将值放进eax寄存器,然后再将eax寄存器中的值返回给相应变量,这就可以解释返回指针其实只是返回了一个地址;3. 返回一个局部指针后,函数中的局部数组的内存已经被释放,然后内部的值并没有被清楚,只是标记说要删除,但重新访问时,就会进行清除,如下面的代码,这后面举得那个例子,对于输出的值,第一个是0,后面的是乱的也就解释通了。PS: 下面的运行结果,第一个可以正常返回,第二个返回空格字符。char * Cstr(void){ char a[10] =... 阅读全文
posted @ 2013-09-18 21:45 litstrong 阅读(351) 评论(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 阅读(484) 评论(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 阅读(249) 评论(0) 推荐(0) 编辑