首页 > 代码库 > 人生第一次hash
人生第一次hash
人生的第一次hash交给了模板题。
讲道理,还没有别人快排要快,就比暴力快那么一点。。。
难道我写的hash就那么菜么?
我想了想,光是处理字符串就O(n*len)。。
这是hash的正确写法吗?我都开始怀疑自己了。
不管怎样,把代码附上,以后可能会用。
#include <cstdio> #include <cstring> #include <iostream> #include <cmath> using namespace std; int n; string h[1000007], s; const int mod = 1000007; long long hash() { int i, len = s.length() - 1; long long ans = 0; for(i = 0; i <= len; i++) ans = ans * 33 + s[i] - ‘a‘; ans = abs(ans); ans %= mod; return ans; } bool insert() { long long i = hash(); while(h[i] != s && h[i] != "") i++; if(h[i] == s) return 0; h[i] = s; return 1; } int main() { int i, j, ans = 0; scanf("%d", &n); getline(cin, s); for(i = 1; i <= n; i++) { getline(cin, s); if(insert()) ans++; } printf("%d", ans); return 0; }
人生第一次hash
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。