2013年7月31日
摘要: 注意 i*i*i 会越界,应定义为 __int64#include #include #define M 100002__int64 map[M] = {0,1};void init(){ for(__int64 i=2; i=0) { printf("%I64d\n",map[n]); } return 0;} 阅读全文
posted @ 2013-07-31 19:16 lk1993 阅读(104) 评论(0) 推荐(0) 编辑
摘要: 这道题以前写过,代码啰嗦,现重写特殊情况:1: 000 0000002: +000 -000003:000.00000 -000.000004:+000.00000 -000.000005: 0000123.4560000 -123.456。。。。。#include #include #define M 100000char A[M],B[M];void conv(char *&pD){ char flag = '*'; if(*pD == '+' || *pD == '-') { flag = *pD; pD++; } while(*p 阅读全文
posted @ 2013-07-31 10:50 lk1993 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 最优子结构分析:如果A、B可以组成C,C最后一个字母必定是A或B的最后一个字母组成。C去除除最后一位,变成是否可以求出A-1和B或A和B-1是否可以构成C-1状态转移方程:用f[i][j] 表示A前 i 位和B前 j 位是否可以组成C的前i+j位 dp[i][j] = (dp[i-1][j] && A[i]==C[i+j]) || (dp[i][j-1] && B[j]==C[i+j])#include #include #define M 202char A[M],B[M],C[M*2];int dp[M][M];int run(){ scanf(" 阅读全文
posted @ 2013-07-31 09:44 lk1993 阅读(166) 评论(0) 推荐(0) 编辑
  2013年7月30日
摘要: #include #include #include using namespace std;#define MU 10#define WLEN 100#define M 100000struct node{ int id; node *child[MU]; node() { id = -1; memset(child,NULL,sizeof(child)); }};char fnMap[3][WLEN] = {"1","1"};void clear(node *root){ for(int i=0; ichild[i] != N... 阅读全文
posted @ 2013-07-30 19:07 lk1993 阅读(189) 评论(0) 推荐(0) 编辑
  2013年7月27日
摘要: #include #include #define M 3002#define MU 26#define WLEN 12struct node{ char to[WLEN]; node *child[MU]; node() { to[0] = '\0'; memset(child,NULL,sizeof(child)); }};char getTr[M],findEd[WLEN];void clear(node *root){ for(int i=0;ichild[i] != NULL) clear(root... 阅读全文
posted @ 2013-07-27 15:00 lk1993 阅读(220) 评论(0) 推荐(0) 编辑
摘要: #include #include #define MU 26#define WLEN (100 + 2)struct node{ int pr; node *child[MU]; node() { pr = 0; memset(child,NULL,sizeof(child)); }};char findStr[WLEN],temp[WLEN];char findMap[][5] = {"","","abc","def","ghi","jkl","mno" 阅读全文
posted @ 2013-07-27 13:41 lk1993 阅读(193) 评论(0) 推荐(0) 编辑
  2013年7月22日
摘要: #include #include #define M 26#define WordSize 32#define WordCount 50000struct node{ int end; node *child[M]; node() { end = 0; memset(child,NULL,sizeof(child)); }};char map[WordCount][WordSize];void insert(node *root, char *str){ node *p = root; int len = strlen(s... 阅读全文
posted @ 2013-07-22 22:06 lk1993 阅读(205) 评论(0) 推荐(0) 编辑
摘要: #include #include #define M 26struct node{ int count; node *child[M]; node() { count = 0; memset(child,NULL,sizeof(child)); }};void clear(node *root){ for(int i=0; ichild[i] != NULL) clear(root->child[i]); } delete root;}void insert(node *root, char *... 阅读全文
posted @ 2013-07-22 21:11 lk1993 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 解题思路:这一题要求我们找到输入的词是字典中多少个词的子串,而不仅仅是其前缀,因此建树的时候需要将词典中词分解成不同前缀加入到树中,即是说将形如abc的词拆成abc,bc,c,三种形式,这样就相当于找输入的词是词典中多少词的前缀,需要注意的是,对于同一个词分解出的多个前缀,如果他们之间有相同的话,这种前缀,只算作一种,即是说形如abca之类的词,会分解出abca,a两种前缀,但因为是同一个词分解出来的,所以算作一种。判断是否是同一个词分解出来的需要给每个输入的词及其分解出的前缀加以相同的id进行编号。#include #include #define M 26struct node{ i... 阅读全文
posted @ 2013-07-22 20:35 lk1993 阅读(323) 评论(0) 推荐(0) 编辑
摘要: Trie树也叫字典树,是一种用于快速检索的多叉树结构。如英文字母的字典树是一个26叉树。数字的字典树是一个10叉树。Trie树把要查找的关键词看作一个字符序列,并根据构成关键词字符的先后顺序构造用于检索的树结构;一棵m度的Trie树或者为空,或者由m棵m度的Trie树构成。特别的:和二叉查找树不同,在Trie树中,每个结点上并非存储一个元素。在Trie树中查找一个关键字的时间和树中包含的结点数无关,而取决于组成关键字的字符数。特点:①利用串的公共前缀->节约内存。②根结点(root)不包含任何字母。③其余结点仅包含一个字母(非元素)。④每个结点的子结点包含字母不同。查找过程:①在Trie 阅读全文
posted @ 2013-07-22 19:23 lk1993 阅读(232) 评论(0) 推荐(0) 编辑