哈希是好东西,二分+哈希是更好的东西

rt

明明能哈希为什么要KMP/AC自动机/后缀数组/后缀自动机/后缀树呢???????

【XSY2361】LCP

给定串 S,m 组询问 (X, Y, L, R): 求 S[X:Y] 与 S[L:R] 的最长公共前缀.

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<cmath>
 6 #include<queue>
 7 #define inf 2147483647
 8 #define eps 1e-9
 9 using namespace std;
10 typedef long long ll;
11 typedef double db;
12 const ll H=173;
13 int len,m,l,r,x,y;
14 ll hs[100001],pw[100001];
15 char s[100001];
16 int work(int L,int R,int x,int y){
17     int l=1,r=min(R-L+1,y-x+1);
18     if(s[L]!=s[x])return 0;
19     while(l<r){
20         int mid=(l+r)/2;
21         if(hs[L]-hs[L+mid]*pw[mid]==hs[x]-hs[x+mid]*pw[mid])l=mid+1;
22         else r=mid;
23     }
24     if(s[L+l-1]!=s[x+l-1])l--;
25     return l;
26 }
27 int main(){
28     scanf("%s",s+1);
29     len=strlen(s+1);
30     pw[0]=1;
31     for(int i=1;i<=len+1;i++)pw[i]=pw[i-1]*H;
32     for(int i=len;i;i--)hs[i]=hs[i+1]*H+s[i]-‘a‘;
33     scanf("%d",&m);
34     for(int i=1;i<=m;i++){
35         scanf("%d%d%d%d",&l,&r,&x,&y);
36         printf("%d\n",work(l,r,x,y));
37     }
38     return 0;
39 }

原文地址:https://www.cnblogs.com/dcdcbigbig/p/10118250.html

时间: 2024-10-10 20:39:16

哈希是好东西,二分+哈希是更好的东西的相关文章

用 二分+哈希 求后缀数组

个人感觉后缀数组的板子太难背了,听了小火车讲二分+哈希可以实现求后缀数组,貌似很好理解,代码如下. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cstring> 5 #include<cmath> 6 #include<algorithm> 7 #include<queue> 8 #include<vector>

POJ 2774 后缀数组 || 二分+哈希

Long Long Message Time Limit: 4000MS   Memory Limit: 131072K Total Submissions: 35607   Accepted: 14275 Case Time Limit: 1000MS Description The little cat is majoring in physics in the capital of Byterland. A piece of sad news comes to him these days

所有东西都是流动的,流动的东西才可以变得柔软,柔软的东西才有包容力(转)

以下为邓康明分享整理: 很开心,看到这么一个事儿办成嘉年华一样的活动.我估计大家心里着急,今天就交流三点. 一.做出选择后,你就被这个选择所决定 我有一个看法:每个人都是一本书,这个书里面可能波澜壮阔,可能清澈如小溪,但这些都不重要.今天无论大家是找工作还是找人,关键这本书是你自己写还是别人写.有很多事情的出发点会决定了你今天过得好不好,和两三年以后过得好不好.在这个过程中,在今天这么一个状况之下,你自己的选择是什么样,你就被这个选择所决定. 你要去创业,就去创业,做了这个决定,那你就被这个决定

【二分答案】【哈希表】【字符串哈希】bzoj2946 [Poi2000]公共串

二分答案,然后搞出hash值扔到哈希表里.期望复杂度O(n*log(n)). #include<cstdio> #include<cstring> #include<vector> using namespace std; typedef unsigned long long ull; const ull seed=29; #define MOD 2007 typedef vector<ull>::iterator VER; vector<ull>

哈希值 是什么?哈希值是什么东西啊?具体怎么识别?怎么用?

原文地址:http://zhidao.baidu.com/link?url=8WuapbywDbanA5cc7mvxPwr8VVEHUZ7DOxpE1-aLNaThQCJMbyvnaN72jD8yb54gtV45XeBu_9l4aUbQDXNAyK 哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值.哈希值是一段数据唯一且极其紧凑的数值表示形式.如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值.要找到散列为同一个值的两个不同的输入,在计

POJ2774(二分+哈希)

Long Long Message Time Limit: 4000MS   Memory Limit: 131072K Total Submissions: 27234   Accepted: 11084 Case Time Limit: 1000MS Description The little cat is majoring in physics in the capital of Byterland. A piece of sad news comes to him these days

映射的应用:哈希表,多维哈希表,多级映射实现字典

看了标题之后你会发现原来映射的功能竟然如此强劲 我们通常所用的map其实就是一棵红黑树,如果有平衡树问题能够用它来解决一定要用,不要手写了,因为红黑树的效率是非常棒的 先看几个定义: map<string,int> m1; map<string,map<string,int> >m2; multiset<string> s1; multimap<string,string> m3; 其中m1就是一个关联数组,为了模拟普通哈希表 (这里的所有的都是

实习小记-python中不可哈希对象设置为可哈希对象

在这篇之前,我又专门翻译过官方python3.3的可哈希对象文档,大家可以先参考一下: 实习小记-python中可哈希对象是个啥?what is hashable object in python? 预备知识: 在定义一个类时,如果我们需要改写该类的__eq__函数,特别要注意的是它将会变为不可哈希对象,也就是说如果你将它放到哈希集会报错误 >>> class A: ... def __init__(self, x): ... self.x = x ... def __eq__(self

《程序员修炼之道:从小工到专家》读书笔记

<程序员修炼之道>读书笔记 之所以选择这本书作为第一本书,是因为这本书描述了一些程序员编写大型项目时所应该遵循的最基本的原则和可以使用的最基本的工具.它没有描述某一种特定的语言.特定的算法,也没有推荐一种编程方法作为万灵药,而是介绍了实用主义的思想,并介绍了一整套方法论帮助程序员与团体避免错误.避免浪费无谓的时间,更有效地开发程序. 在此前的学习中,我所学习的知识往往是一个个点状的知识.学校安排了c语言.数据结构等课程,我自学过一点点cpp.python,甚至了解过一些web架构,但从来没有一