洛谷P3370 【模板】字符串哈希
来源:互联网 发布:北京美工工资怎么算 编辑:程序博客网 时间:2024/06/08 06:18
一定要记住HASH链表的高端写法!!!
参考了杨婉倩大佬的写法,原来的自己乱搞版WA了70分……
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define ull unsigned long longconst int base1=1000007,base2=99859,MOD=69847;int cnt=0,len;int head[MOD+2],nxt[10000+5],etot;char s[1505]; struct node{ ull f,s;}val[10000+5];int ha(int from,ull hash1,ull hash2){ for(int i=head[from];i;i=nxt[i]) if(val[i].f==hash1&&val[i].s==hash2) return 0; val[++etot].f=hash1,val[etot].s=hash2; nxt[etot]=head[from]; head[from]=etot; return 1;}void Hash(int len){ ull hash1=1,hash2=1; for(int i=1;i<=len;i++){ hash1=(hash1+s[i])*base1; hash2=hash1*base2; } cnt+=ha((hash2%MOD+MOD)%MOD,hash1,hash2);}int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%s",s); len=strlen(s); Hash(len); } printf("%d",cnt); return 0;}
ywq大佬的原版
#include<bits/stdc++.h>#define uint unsigned intusing namespace std;const int N = 10000 + 10;const int M = 1500 + 10;const int mod = 10000007;int n,cnt=0;char s[M];struct node{ int pre; uint hash1,hash2;}stb[N];int num=0,head[mod+3];int link(int from,uint hash1,uint hash2){ for(int i=head[from];i;i=stb[i].pre) if(stb[i].hash1==hash1&&stb[i].hash2==hash2) return 0; stb[++num].pre=head[from],stb[num].hash1=hash1,stb[num].hash2=hash2; head[from]=num; return 1;}void hash(int len){ uint seed=31,hash1=0; for(int i=0;i<len;++i) hash1=hash1*seed+s[i]; uint hash2=0; for(int i=0;i<len;++i){ if(i&1) hash2^=(~((hash2<<11)^s[i]^(hash2>>5))); else hash2^=((hash2<<7)^s[i]^(hash2>>3)); } cnt+=link(hash1%mod,hash1,hash2);}int main(){ scanf("%d",&n); while(n--){ scanf("%s",s); int len=strlen(s); hash(len); } printf("%d\n",cnt); return 0;}
阅读全文
0 0
- 洛谷 P3370 【模板】字符串哈希
- 【模板】【洛谷P3370】字符串哈希
- 洛谷P3370 【模板】字符串哈希
- P3370 【模板】字符串哈希
- P3370 【模板】字符串哈希
- P3370 [模板] 字符串哈希
- [P3370][模板]字符串哈希
- 字符串哈希-P3370 【模板】字符串哈希
- 洛谷P3370
- 【洛谷P3370】【NOIP2013】 火柴排队
- 字符串哈希模板
- 【模板】字符串哈希
- 【模板】 字符串哈希
- [模板]-字符串哈希
- 【模板】字符串哈希
- 洛谷3370字符串哈希模板
- HDU4821-字符串哈希模板
- ACM hash哈希字符串 模板 hdu4080
- 欢迎使用CSDN-markdown编辑器
- 理解事务的4种隔离级别
- Oracle最无奈错误PLS-00103
- Hypervisor是什么
- Robot Framework SSH登录
- 洛谷P3370 【模板】字符串哈希
- android 系统虚拟键盘的收起与显示
- 非关系型数据库Redis
- JavaWeb刷新浏览器防止重复提交请求
- js横幅广告轮播图
- JavaScript 实例:点击漫天小星星 (获取整个浏览器窗口的宽高)
- centos7 安装nagios监控软件
- postgresql中客户端连接到服务器端之后产生的进程情况
- Linux下GitLab的安装部署和web出现502的一个解决建议!