IT民工
加油!
摘要: 求哈夫曼树的平均码长,用优先队列来写,先记录某个字符在字符串里出现的次数,然后放入队列。依次取出第一小和第二小的数,将两个数相加,构成新的虚拟结点,放入队列中。/*Accepted 196K 0MS C++ 918B 2012-08-01 17:25:00*/#include<stdio.h>#include<string.h>#include<stdlib.h>#include<queue>using namespace std;int key[1 << 7], len;char t[1 << 10];int huffm 阅读全文
posted @ 2012-08-01 17:33 找回失去的 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 给出一个字符串A,求A有多少个前缀同时也是后缀,从小到大输出这些前缀的长度分析:KMP对于长度为len的字符串,由next的定义知:A[0]A[1]...A[next[len]-1]=A[len-next[len]]...A[len-1]此时A[0]A[1]...A[next[len]-1]为一个符合条件的前缀有A[0]A[1]....A[next[next[len]]-1]=A[len-next[next[len]-next[next[len]]]...A[next[len]-1],故A[0]A[1]....A[next[next[len]]-1]也是一个符合条件的前缀故从len=>n 阅读全文
posted @ 2012-08-01 16:55 找回失去的 阅读(190) 评论(0) 推荐(1) 编辑
摘要: 用KMP求循环节。/*Accepted 5288K 110MS G++ 712B 2012-08-01 16:03:19*/#include<stdio.h>#include<string.h>#include<stdlib.h>const int MAXN = 1 << 20;char t[MAXN];int next[MAXN], len;void Make_Next(){ int i = 0, j = -1; next[0] = -1; len = strlen(t); while(i < len) { if(-1... 阅读全文
posted @ 2012-08-01 16:10 找回失去的 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 字符串模式匹配,KMP算法相当高效,O(n+m)。关键在求出模式串的next数组,求完这个,一些基本的题应该都是没有问题了的,文本串只要扫描一次。求模式串在文本中出现的次数,当匹配模式串的最后一个字符时,就说明出现了一次。/*Accepted 1192K 94MS C++ 987B 2012-08-01 09:21:25*/#include<stdio.h>#include<string.h>#include<stdlib.h>const int MAXT = 1000100;const int MAXW = 10010;char T[MAXT], W[MA 阅读全文
posted @ 2012-08-01 09:29 找回失去的 阅读(260) 评论(0) 推荐(0) 编辑