跳至正文

Vim 和 Emacs, 我的选择

  • 随笔

  既然是一个程序员就要像一个程序员,总需要有一款顺手,熟练地软件让自己使用吧,说到软件,编译和调试方面gcc和gdb无可替代,但是在编辑方面,有两把等待我霸气的剑,每一把身上都是波光粼粼,荣誉陪伴着的!我不知道选哪个——vim, emacs,其实我用vim有一阵子了,但是我还是不够熟练,所以现在换的话还算来得及。
  到网上搜了好久,最后两篇帖子给了我决定,一篇是一个人从vim转到emacs里去的文章,他说他学Vim很久了,后来却爱上了Emacs。他说他如果没有.emacs那Vim和Emacs是差不多的,但是他有了[……]

继续阅读

NOIP2005 循环 解题报告

刚看到题目,我不知所措,真不知道怎么做(NOIP我真的是太菜了。)。
到网上找到了一个高手的结题报告(几个题目我都是搜到的他的。),原来可以用DP来解大致的思路是这样子的:
比如这里有一个循环(只是假设,可能没有这个数):123 245 344 123,这就是一个循环数,没错吧?,好,再仔细观察一下,第一项和最后一项的后二位数也是相同的,也就是说后k个数循环的长度是后k-1个数循环长度的倍数。
恩,至于代码的话,等下再发上来

(2010年8月4日18:26:10),这一题希望能成为我的OI转折题,没什么别的,这题我[……]

继续阅读

Glibc 中的 qsort

  • 技术

这函数真够长的,吓死!
记得我前两天看到别人做的一个程序,用的是自己写的快速排序,而我用的qosrt,结果我的100ms,他的350ms。这程序真贼快的
因为我把每天的倾城都安排好了,所以只有半个小时的时间看,所以没看完,先注释一部分吧,明天再补一部分,估计一下子还看不完。整个qsort的代码如下:


#include <alloca.h>
#include <limits.h>
#include <stdlib.h>
#include <string.h>

/*[......]

继续阅读

NOIP 过河 解题报告

这题我不怎么说吧,我在网上搜的,到现在为止为什么能这样我还是没想通,只知道这样能过。
就当是个定理吧,记住就是了,这题我不太想解释,看代码吧:

#include <stdio.h>
#define INT_MAX 200000000
int stone[100];
int map[9190], f[9190];

int com(const void *a, const void *b){ return *(int *)a - *(int *)b; }

int main(void)
{
 int i,[......]

继续阅读

Glibc 中的 memset

  • 技术

Glibc的效率真的快!快到让我想不到!!!
这个memset跑的贼快~!不过我还是没想通,为什么不用汇编呢?sep movw,速度可能更快!
对memset的注释如下:

C语言: [Codee#12483](http://fayaa.com/code/view/12483/)

void *memset(void *dstpp, int c, size_t len)
{
 long int dstp = (long int) dstpp;
 /* 正在翻阅为什么用long int 而不是void *. */
 /[......]

继续阅读

USACO 3.2.6 Sweet Butter 香甜的黄油 解题报告

这题一开始我用的那个O(n^3)的算法,叫什么名字我忘了,肯定是超时了咯,因为图是稀疏图,这样是肯定超时的,后来就看标称,看了好久,真没想到标称竟然如此精妙,里面设计了一个能够以O(1)的速度查找元素的功能,整个程序是执行了至多n次Dijkstra算法,然后我在里面增加了一些优化(几乎和时间无关的优化,因为数据量太大,CPU又太好用了),比如用位运算代替乘除法(乘以或除以2),在上滤和下滤的过程把递归改成了非递归,防止重复的牛所在的牧场进行计算,让heap_val在上滤和下滤的过程中不修改,反正最大的数据程序还是要[……]

继续阅读

奖学金 解题报告

这是个水题,我直接使用了库函数qsort进行了排序,然后输出前五个就可以了,唯一想要说的就是明天或后天把Glibc中的qsort代码看下,学习一下是怎么对超级巨大的数据量进行快速排序的,一个个交换肯定不是,这些都明天再说吧。

#include <stdio.h>
#include <stdlib.h>
#define MAX 300
struct grade{
 int a, b, c;
 int id;
}totle[MAX];
int compare(const void *a, con[......]

继续阅读

2^k进制数 解题报告

这题困扰了我好几天,详细看了别人的题解,自己反复琢磨,终于琢磨透了。
把我的思路讲一下,f[i][j] 表示第i位(从右向左数, 如12中的1是第二位),则很容易得到一个DP:
f[i][j] = f[i – 1][j + 1] + f[i – 1][j + 2] + f[i – 1][j + 3] + …. + f[i – 1][n] (n为极限,放在后面讲。)
不用说,用这个递推公式绝对会超时,所以还需要对公式观察一下:
f[i][j] = f[i – 1][j + 1] + f[i – 1][j + 2][……]

继续阅读