Chinaunix首页 | 论坛 | 博客
  • 博客访问: 125396
  • 博文数量: 31
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 275
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-08 15:00
文章分类

全部博文(31)

文章存档

2009年(15)

2008年(16)

我的朋友

分类: C/C++

2009-03-19 10:13:16

ACM POJ 1200
 
#include
#include
#define Max 16000000
int hash[Max] = { 0 };
int ascii[128];
int rabin_karp(int sizeOfAlphabet, int lengthOfSubstr, char *text) {
    int res = 0, E, count = 1,n = strlen(text);
    int key = 0;
    int i;
    for (i = 1, E = 1; i < lengthOfSubstr; i++)
        E *= sizeOfAlphabet;
   
    memset(ascii, 0, sizeof(ascii));
    while (text[i]) {
        if (!ascii[text[i]])
            ascii[text[i]] = ++key;
        i++;
        if (key == sizeOfAlphabet)
            break;
    }
   
    for (i = 0; i < lengthOfSubstr; i++)
        res = (sizeOfAlphabet * res + ascii[text[i]]);
    hash[res] = 1;
   
    for (i = 0; i < n - lengthOfSubstr; i++) {
        res = sizeOfAlphabet * (res - (ascii[text[i]]) * E) + (ascii[text[i + lengthOfSubstr]]);
        if (!hash[res])
            hash[res] = 1, count++;
    }
    return count;
}
char s[20000000];
int main() {
    int nc, length;
 //freopen("input.txt","r",stdin);
    scanf("%d%d%s", &length, &nc, &s);
    printf("%d", rabin_karp(nc, length, s));
    return 0;
}
阅读(1159) | 评论(0) | 转发(0) |
0

上一篇:B+树的组织结构

下一篇:ACM POJ 1002

给主人留下些什么吧!~~