当前位置:   article > 正文

洛谷 3370【字符串哈希初步】_洛谷c语言3370

洛谷c语言3370

题目链接

Analyse:

我也是才学字符串哈希,大概理解是,对于一个字符串,你可以通过某种方式,来将整个字符串转化为一个数值,然后就用这个数值来代表了这个字符串。但是这种计算方式是有一定要求的, 也就是说 在需要计算的字符串很多的情况下,要不同的字符串计算出来的这个数值尽可能的不同,这样才能保证一一对应。。。。都不知道自己在说什么,Orz

 

AC代码:

  1. ///单哈希
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. const int maxn = 1e4 + 10;
  5. typedef long long ll;
  6. typedef unsigned long long ull;
  7. ull harsh[maxn]; ///ull 是自动取模,对2^63
  8. char ch[maxn];
  9. ull gethash(char *s){
  10. ull h = 0;
  11. int len = strlen(s);
  12. for(int i = 0;i < len;i ++){
  13. h = h * 13331 + s[i] - '0'; ///这也就是那个 特殊的计算方式
  14. }
  15. return h;
  16. }
  17. int main()
  18. {
  19. int n; scanf("%d",&n);
  20. for(int i = 0;i < n;i ++){
  21. scanf("%s",ch);
  22. harsh[i] = gethash(ch);
  23. }
  24. sort(harsh,harsh + n);
  25. int m = unique(harsh,harsh + n) - harsh;
  26. printf("%d\n",m);
  27. return 0;
  28. }

 

还有的方法就是多一个计算方式,让两个数值来代表同一个 字符串,这样也就能更加减少 重复的可能。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = 1e4 + 10;
  4. typedef long long ll;
  5. typedef unsigned long long ull;
  6. struct xx{
  7. ull a,b; ///ull 是自动取模,对2^63;
  8. }harsh[maxn];
  9. char ch[maxn];
  10. void gethash(char *s,int num){
  11. ull h = 0,h1 = 0;
  12. int len = strlen(s);
  13. for(int i = 0;i < len;i ++){
  14. h = h * 13331 + s[i] - '0'; ///这也就是那个 特殊的计算方式
  15. h1 = h * 9991 + (int) s[i];
  16. }
  17. harsh[num].a = h;
  18. harsh[num].b = h1;
  19. }
  20. bool cmp(xx A,xx B){
  21. if(A.a != B.a)
  22. return A.a < B.a;
  23. return A.b < B.b;
  24. }
  25. int main()
  26. {
  27. int n; scanf("%d",&n);
  28. for(int i = 0;i < n;i ++){
  29. scanf("%s",ch);
  30. gethash(ch,i);
  31. }
  32. int ans = 0;
  33. sort(harsh,harsh + n,cmp);
  34. for(int i = 0;i < n;i ++)
  35. if(harsh[i].a == harsh[i + 1].a && harsh[i].b == harsh[i + 1].b)
  36. ans ++;
  37. printf("%d\n",n - ans);
  38. return 0;
  39. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/728730
推荐阅读
相关标签
  

闽ICP备14008679号