| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:本人用Karp-Rabin 和Hash, 各位看看为什么runtime errorIn Reply To:本人用Karp-Rabin 和Hash, 各位看看为什么runtime error Posted by:ss08zhangchi at 2010-01-23 16:30:24 > #include <stdio.h>
> #include <string.h>
> #include <math.h>
>
> int main ()
> {
> int N, NC, count, value, h, d, i, len ;
> int table[512], hashtable[16000000] ;
> char text[1000000] ;
>
> while (scanf ("%d%d%s", &N, &NC, text) != EOF)
> {
> memset (table, 0xff, sizeof (table)) ;
> memset (hashtable, 0, sizeof (hashtable)) ;
>
> h = pow ((double) NC, (double) (N - 1)) ;
> d = NC ; //进制数
> count = 0 ;
> value = 0 ;//用来保存每个定长子串对应的整型值
> len = strlen (text) ;
>
> for (i = 0 ; i < len ; i++) //将字符串中每个会出现的字符映射到一个整型值,这个整型值的范围是[0, NC - 1]
> if (table[text[i]] == -1)
> table[text[i]] = count++ ;
>
> for (i = 0 ; i < N ; i++) //每个定长字串对应一个整型值,而且这个值的范围是[0, NC^N - 1]
>
> value = d * value + table[text[i]] ;
>
> hashtable[value] = 1 ;
> count = 1 ;
>
> for (i = 1 ; i + N - 1 < len ; i++)
> {
> value = d * (value - h * table[text[i - 1]]) + table[text[i + N - 1]] ;
> if (hashtable[value] == 0)
> {
> hashtable[value] = 1 ;
> count++ ;
> }
> }
>
> printf ("%d\n", count) ;
> }
> return 0 ;
> }
可能是hash出来的数值太大 数组越界所致
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator