POJ 1200Crazy Search解题报告
2013-03-06 21:10
393 查看
字符串哈希的入门题目,字符串哈希算法,大部分用的其实是进制表示,通过转换成不同进制的整数来表示一个字符串,因为计算机存储整数是有最大限度的,所以按照这种方法进行字符串哈希得到的整数有可能会越界,越界处理之后产生的结果,就是可能会造成冲突:两个字符串的值会相同,这道题不用考虑那么多,不过因为字符串太长,所以要对一个数取模,最多出现NC个不同的字符,可以像整数一样利用NC进制来表示,参照二进制的数值表示也能知道,要对NC^N取模
View Code
View Code
#include <iostream> #include <cstdio> #include <cstring> using namespace std; #define LEN 17000000 bool val[LEN]; char s[LEN]; int use[300]; int main() { int i,j,N,NC,len; int mod; while(scanf("%d%d",&N,&NC)!=EOF) { memset(val,0,sizeof(val)); memset(use,0,sizeof(use)); scanf("%s",s); len = strlen(s); int res = 0; for(i = 0;i < len;i++) use[s[i]] = 1; j = 0; for(i = 0;i < 300;i++) if(use[i]) use[i] = j++; mod = 1; for(i = 0;i < N-1;i++) mod *= NC; for(i = 0;i < N;i++) res = res * NC + use[s[i]]; val[res] = true; for(i = N;i < len;i++) { res = res % mod * NC + use[s[i]]; val[res] = true; } int count=0; mod *= NC; for(i = 0;i <= mod;i++) if(val[i]) count++; printf("%d\n",count); } return 0; }
相关文章推荐
- POJ 1200 Crazy Search 解题报告
- poj 1905Expanding Rods(二分法)(解题报告)
- POJ 1753 Flip Game 解题报告
- poj解题报告——2262
- POJ 3176 解题报告
- 【POJ 2396】 Budget 带上下界网络流 解题报告
- 【POJ】【1033】【Defragment】【模拟】解题报告
- 【POJ 2157】 Maze 解题报告
- poj图论解题报告索引
- 【LeetCode】Convert Sorted List to Binary Search Tree 解题报告
- POJ 1702 解题报告——Eva's Balance:用砝码为物体称重
- POJ 1006 Biorhythms 解题报告(中国剩余定理)
- poj 1947 Rebuilding Roads解题报告
- POJ 3983 解题报告
- POJ-1365-Prime Land 解题报告
- POJ 1065 解题报告
- poj 2777-Count Color解题报告
- 【原】 POJ 1141 Brackets Sequence 动态规划 解题报告
- 【原】 POJ 1159 Palindrome 回文 动态规划 解题报告
- 【原】 POJ 2352 Stars 树状数组 解题报告