pku 1200
2009年7月15日 星期三
題目鏈接:PKU 1200 Crazy Search
分類:字符串哈希
題目分析與算法模型
本題是一個字符串哈希,即Rabin-Karp方法,該法算法導論中有介紹,就是將每個子字符串對應算出一個整數(該整數唯一標記字符串),然后統計asca數組存的是字符串中每個不同字母對應的一個值(0到N-1),采用N進制,本題中N即為nc,因為字母的ASCII碼最大不會超過122,所以數組開到125足以,具體實現見代碼,呵呵
Code:
1
#include <stdio.h>
2
#include <string.h>
3
int n,nc;
4
char str[20000000],asca[125];
5
int hash[16000005];
6
int main()
7

{
8
while(scanf("%d%d",&n,&nc)!=EOF)
9
{
10
scanf("%s",str);
11
int i=0,j,key=0,len=strlen(str),sum,cnt=0;
12
while(str[i])
13
{
14
if(asca[str[i]]==0) asca[str[i]]=key++;
15
i++;
16
if(key==nc) break;
17
}
18
for(i=0;i+n-1<len;i++)
19
{
20
sum=0;
21
for(j=i;j<=i+n-1;j++)sum=sum*nc+asca[str[j]];
22
if(hash[sum]==0)
23
{
24
hash[sum]=1;
25
cnt++;
26
}
27
}
28
printf("%d\n",cnt);
29
}
30
return 0;
31
}
32
33
34
題目鏈接:PKU 1200 Crazy Search
分類:字符串哈希
題目分析與算法模型
本題是一個字符串哈希,即Rabin-Karp方法,該法算法導論中有介紹,就是將每個子字符串對應算出一個整數(該整數唯一標記字符串),然后統計asca數組存的是字符串中每個不同字母對應的一個值(0到N-1),采用N進制,本題中N即為nc,因為字母的ASCII碼最大不會超過122,所以數組開到125足以,具體實現見代碼,呵呵
Code:
1

2

3

4

5

6

7



8

9



10

11

12

13



14

15

16

17

18

19



20

21

22

23



24

25

26

27

28

29

30

31

32

33

34
