当前位置:
首页 >
poj 1200
发布时间:2025/1/21
27
豆豆
裸哈希,感觉oj的数据弱啊,如果N很大的话,内存就不够用,可能我没想明白?
#include <stdio.h> #include <string.h> const int maxn=16000010; char s[maxn]; int li[300]; short hash[maxn]; int tot; int main() {int N,NC;scanf("%d%d",&N,&NC);scanf("%s",s);int sl=strlen(s);int t=1,i,j;memset(hash,0,sizeof(hash));memset(li,0,sizeof(li));for(i=0;i<sl;i++){if(!li[s[i]])li[s[i]]=t++;//t只能从1开始}int sum;for(i=0;i<=sl-N;i++){sum=0;for(j=i;j<i+N;j++){sum=sum*NC+li[s[j]];//决定了只能从1开始,如果t为0,会出现不是同一串却有相同的hash值,而且要记住这个哈希函数,只要散列表足够大,这个哈希函数就不会产生冲突}if(!hash[sum]){hash[sum]=1;tot++;}}printf("%d\n",tot);return 0; }
转载于:https://www.cnblogs.com/lj-vs-lishimin/archive/2012/10/14/2774377.html
总结
- 上一篇: 将数组中的值按逆序重新存放
- 下一篇: 实例教程二:短信发送器