几道hash题
2024-08-30 03:17:32
1:
UVa 10887 - Concatenation of Languages
map 可以做 ,但是输入实在恶心,有空串之类的HASH模板:
int Hash(char *s)
{
int seed=131,sum=0;
while (*s)
sum=sum*seed+(*s++);
return (sum&0x7FFFFFFF)%N;
}
void hash_insert(int s)
{
int h=Hash(c[s]);
int u=head[h];
while (u)
{
if (!strcmp(c[s],c[u]))
{
return;
}
u=next[u];
}
next[s]=head[h];
head[h]=s;
++ans;
}虽然简单,但是要灵活用好也比较费力。
UVA :Matrix Matcher
一般 矩阵 串里面找存在目标字串 多少次 的hash写法。
虽然 自然溢出的算法会碰撞的几率很小,但是还是有的,所以这是你没想到 更好的解法的时候碰一下运气的做法。
不过 碰撞的几率 很小。
ull p=;
for (int i=;i<x;i++)
{
ull tmp=;
for (int j=;j<y;j++)
tmp=tmp*B1+s1[i][j];
p=p*B2+tmp;
} ull t=;
int ans=; for (int i=;i<y;i++) t*=B1;
for (int i=;i<n;i++)
{
ull a=;
for (int j=;j<y;j++) a=a*B1+s[i][j];
mp[i][y-]=a;
for (int j=y;j<=m;j++)
mp[i][j]=mp[i][j-]*B1-s[i][j-y]*t+s[i][j];
}
t=;
for (int i=;i<x;i++) t*=B2; for (int i=y-;i<=m;i++)
{
ull tmp=;
for (int j=;j<x;j++) tmp=tmp*B2+mp[j][i];
mpp[x-][i]=tmp;
if (tmp==p) ans++;
for (int j=x;j<n;j++)
{
mpp[j][i]=mpp[j-][i]*B2-mp[j-x][i]*t+mp[j][i];
if (mpp[j][i]==p) ans++;
}
最新文章
- Jmeter + Grafana + InfluxDB 性能测试监控
- java怎么定义一个二维数组?
- 思考之一——PM(Project Manager)
- 经典好文:android和iOS平台的崩溃捕获和收集
- ceph源码之一
- hdu 4972 A simple dynamic programming problem(高效)
- 关于mysql表中有大文本limit慢的优化
- 【推荐】地推统计结算工具SDK,手机开发首选
- android studio 虚拟机adb.exe已停止工作的处理
- ansible-play中for,if的使用
- ElasticSearch6.5.0 【Rejecting mapping update to [posts] as the final mapping would have more than 1 type】
- 《大型网站系统与Java中间件实践》
- tensorflow笔记9:nn_ops.bias_add 函数
- webug4.0安装
- IntelliJ IDEA(2018)安装详解
- Mahout0.6-VectorDumper bug修复
- [BZOJ3678]wangxz与OJ-[Splay一类的平衡树]
- 2月24日考试——ZYYS
- js获取某周、某月、下月、某季度的开始日期、结束日期及判断日期第几周
- 【BZOJ2908】又是nand 树链剖分+线段树