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 |
第一个hash,而且用了两次。。。。。想看的可以看一下一开始直接用ascii码对应。结果就怀具了。 应该是加和超过范围了。。 代码写得脑残了。。大家可能看着费劲。。让人看不懂的代码不是好代码。。用同样方法做过的童鞋应该容易看明白些。。仅供娱乐。。 #include <iostream> using namespace std; int hash[20000000]={0}; char str[17000000]; int ascii_table[255]={0};//为字母赋值 int map [255]={0};//记录某个字母是否出现 int main () { int N; scanf("%d",&N); int Nc; scanf("%d",&Nc); scanf("%s",&str); int j; int k; int temp; int ans=0; int ascii=0; for(j=0; str[j+N-1]!='\0'; j++) { temp=0; for(k=0; k<N; k++) { if (!map[(int)str[j+k]]) { map[(int)str[j+k]]=1; ascii_table[(int)str[j+k]]=ascii++; } temp=temp*Nc+ascii_table[(int)str[j+k]]; } if (!hash[temp]) { hash[temp]++; ans++; } } printf("%d\n",ans); return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator