poj 1200
裸哈希,感覺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
總結
- 上一篇: 将数组中的值按逆序重新存放
- 下一篇: 实例教程二:短信发送器