POJ-1200(N进制字符串hash)
2014-08-14 17:05
357 查看
题目:http://poj.org/problem?id=1200
一开始用set + strncmp,华丽丽的超时了,看了discuss之后才意识到要用hash
一开始用set + strncmp,华丽丽的超时了,看了discuss之后才意识到要用hash
#include <cstdio> #include <cstring> #define MAX 16000000 int getPower(int n, int exp) { if(exp == 1) return n; int t = getPower(n, exp >> 1); if(exp & 1) return n * t * t; else return t * t; } int N, NC, total, len, map[128]; char str[MAX + 1]; bool use[MAX + 1]; int getHash(int i){ int n = 0, k = 0; for(; k < N; ++k){ n = n * NC + map[str[i + k]]; } return n; } void solve() { int i, hash, kinds = 0; for(i = 0; i + N <= len; ++i){ hash = getHash(i); if(!use[hash]){ use[hash] = true; ++kinds; if(kinds == total) break; } } printf("%d\n", kinds); } void init() { total = getPower(NC, N); len = strlen(str); memset(use, false, total); memset(map, -1, sizeof(map)); int kinds = 0, i = 0; for(; kinds < NC; ++i){ if(map[str[i]] == -1){ map[str[i]] = kinds++; } } } inline void input(){ scanf("%d %d %s", &N, &NC, str); } int main() { input(); init(); solve(); return 0; }
相关文章推荐
- POJ 1200 Crazy Search(字符串简单的hash)
- poj 1200 Hash处理字符串(简单的rabin-karp)
- poj 1200(字符串hash)
- hash&Rabin-Karp字符串查找POJ 1200 Crazy Search
- poj 1200 Crazy Search 字符串hash
- POJ 1200 Crazy Search (字符串hash)
- POJ 1200 字符串hash
- POJ 1200字符串hash
- poj 1200 Crazy Search(字符串hash)
- poj 1200 --- 不错的字符串HASH构造方法
- POJ题目1200 Crazy Search(字符串hash)
- poj 1200 (字符串hash)
- poj 3461 字符串单串匹配--KMP或者字符串HASH
- poj 1200 Crazy Search【hash】
- POJ 1200 Crazy Search(hash).
- POJ 1200 Crazy Search(HASH)
- poj 2774 最长公共子串--字符串hash或者后缀数组或者后缀自动机
- 一道有关hash的POJ题目:POJ1200 Crazy Search
- poj 1200 hash
- poj 3087 模拟(ELFHash模版,字符串哈希)