POJ2774(二分+哈希)

poj-2774 二分+字符串哈希+二分 给两个最多100000长度的字符串,求出他们的最长公共子串。         最长公共子串存在单调性 -- 如果两个串存在长度为k的公共子串,那么必然存在长度0到k-1的公共子串。 利用其单调性,先二分公共子串长度len,再用O(n)时间算出两个串各自长度为len的子串哈希值,再用O(nlogn)时间对计算得到的值排序+二分查找若存在相同的哈希值,则存在长度为len的公共子串。 这样的做法总 阅读详情

题意:求最长公共子串

参考http://www.cnblogs.com/Penn000/p/5852483.html

const ULL seed=131;
ULL h1[N],h2[N],ts[N];
char s1[N],s2[N];
ULL a[N];
int len1,len2;
ULL gethash(ULL *h,int l,int r){
    return h[r]-ts[r-l]*h[l];
}
bool ok(int len){
    int cnt=0;
    for(int i=len;i<=len1;++i){
        a[cnt++]=gethash(h1,i-len,i);
    }
    sort(a,a+cnt);
    for(int i=len;i<=len2;++i){
        ULL now=gethash(h2,i-len,i);
        if(binary_search(a,a+cnt,now))return true;
    }
    return false;
}
int main(){
    ts[0]=1;
    for(int i=1;i<=N;++i)ts[i]=ts[i-1]*seed;
    while(~sf(" %s%s",s1,s2)){
        len1=strlen(s1);
        len2=strlen(s2);
        h1[0]=0;
        for(int i=0;i<len1;++i)
            h1[i+1]=h1[i]*seed+s1[i];
        h2[0]=0;
        for(int i=0;i<len2;++i)
            h2[i+1]=h2[i]*seed+s2[i];
        int l=0,r=max(len1,len2);
        while(l<r){
            int mid=(l+r)>>1;
            if(ok(mid+1))l=mid+1;
            else r=mid;
        }
        pf("%d\n",l);
    }
}
字符串hash + 二分答案 - 求最长公共子串 --- poj 2774 Long Long Message Problem's Link:http://poj.org/problem?id=2774   Mean:   求两个字符串的最长公共子串的长度。 analyse:  前面在学习后缀数组的时候已经做过一遍了,但是现在主攻字符串hash,再用字符串hash写一遍。 这题的思路是这样的: 1)取较短的串的长度作为high,然后二分答案(每次判断长 阅读详情

相关推荐

二分三分哈希

二分三分哈希自做课件,提供参考 二分:在一个单调有序的集合中查找元素,每次将集合分为左右两部分,判断解在哪个部分中并调集集合上下界,重复直到找到目标元素。时间复杂度:O(logn) 三分:最基础的作用,寻找凸性函数极值 哈希:Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

【POJ2774】后缀数组 / Hash+二分

POJ2774 链接 题意求两个串的最长公共子串,我们可以把两个串用一个特殊字符拼接,然后跑SA求出heightSA求出heightSA求出height,由于最长公共子串肯定是heightheightheight中的某一个,而且要满足sa[i]和sa[i−1]sa[i]和sa[i−1]sa[i]和sa[i-1]分别属于两个串,所以只要跑一遍后缀数组遍历一遍heightheightheight就...

lajiyuan的博客 453

别再只盯着meta包了!盘点R语言中7个元分析工具包的特色与适用场景

本文深入评测了R语言中7个主流元分析工具包(meta、metafor、netmeta、mada、mvmeta、metasens、rmeta)的核心功能与适用场景,帮助研究者根据具体需求精准选型。通过对比表格和实际代码示例,详细解析了各工具包在传统两两比较、网络Meta分析、诊断准确性研究等不同场景下的差异化优势,并提供了性能对比和组合使用建议。

weixin_30736301的博客 296

字符串哈希 +二分

这个题目我们可以用二分 + 哈希来做,我们要先验证一下二分的可行性,我们如果找到一个不符合的1 - i ,那么不可能存在一个j ( j > i )使得 1 - j 成立。前言:之前纠结了很久的字符串哈希原来是有结论的。注意我们的数组一定要开long long。

wniuniu_的博客 447

ubuntu20.04安装UE4+Airsim环境

版本UE4.27+Airsim1.81

玖茸的博客 3380

Word论文插入带有方括号序号的参考文献——尾注+交叉引用

文章目录1. 尾注功能2. 为参考文献的序号添加方括号3. 调整参考文献前的序号大小4. 重复引用同一参考文献5. 将交叉引用的序号改为带有方括号的上标序号格式6. 删除参考文献前的尾注横线 1. 尾注功能 首先使用尾注功能顺序插入参考文献,暂时不考虑方括号问题,具体操作如下: ① 将光标放在需要插入参考文献角标的地方 ② 在word菜单栏,“引用-脚注部分右下角箭头”(用来设置尾注格式) ③如...

Your_Raymond的博客 9万+

字符串 hash + poj 2774 (hash+二分)

所谓字符串hash 就是将一串字符串 hash对应的一个值,一般后续的查找,匹配等等 比较常见的方法是,将字符串看作是一个p进制的值,然后对这个很大的数进行取模,得到的就是该字符串的hash值,根据前人的经验,为了减少冲突,我们将p 选择为31 ,131 这些数字,并且为了方便,我们直接把数值类型定义为unsigned long long 这样,我们就不许要手动取模,当数值溢出的时候, unsi...

beckyUp的博客 450

记一次从零到getshell的渗透历程

0x00 前期 拿到测试范围清单后,首先用脚本获取了下各个子站的标题,基本都是XXX管理系统。浏览器查看后,各个子站也大同小异,纯登录系统,带验证码。这些系统基本都是jsp写的,逮到了两个没有验证码的小宝贝,一番暴力破解,小宝贝对我说:别爱我,没结果。又看到了两个站返回的Set-Cookie头:rememberMe=deleteMe; 很明显,这是Apache Shiro。打了一波exp,没有反应,放弃。搞了三天啥都没搞出来,和女朋友出去玩散散心,还是很高兴。 0x01 初显进展 测试范围内有六个门户

CanMeng'Blog - 一个WEB安全渗透的技术爱好者 3968

二分+哈希

二分+哈希

qq_65039825的博客 317

使用MATLAB结合EasySpin进行ESR模拟的详细步骤及示例代码

安装EasySpin:确保你已经安装了EasySpin工具箱,它可以帮助你进行ESR模拟。你可以从EasySpin的官方网站(https://easyspin.org/)下载并安装。准备实验数据:将实验得到的EPR数据整理成合适的格式,一般包含磁场(Magnetic Field)和信号强度(Intensity)两列。进行模拟:使用EasySpin的函数对单线态氧自由基和超氧自由基进行模拟。调整参数:通过调整模拟参数,使模拟得到的峰型和峰位置与实验数据尽可能匹配。导出数据。

AI的内部世界的博客 2004

dji psdk开发 关于SDK认证芯片的使用

Payload SDK V3.10.0 于 2025-1-8 发布,增加了 Matrice 4T/4E 机型支持,同时也增加了 DJI SDK 认证芯片(DJI SDK CC)功能支持。关于认证芯片的介绍大疆 SDK 认证芯片(DJI SDK Certified Chip),简称 DJI SDK CC,用于认证基于 DJI Eport/Eport-Lite 接口开发的第三方负载设备,确保设备能够正常工作并与无人机可以进行有效通信,起到负载安全认证和功能授权的作用。

热爱生活,忠于自己 2142

POJ 2774 哈希+二分长度

思路:这题一看就知道是后缀数组做的了,好像以前做过,不过现在专攻哈希,所以就用哈希做了。 不过这题我真是要疯了!!! 刚开始写的就对了,然后二分while循环那忘了写等号了,然后一直WA,尼玛,然后自己居然给出一组样例: bbaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaa 这组的样例中的长度为6和7的时候哈希值居然不一样,然后输出了6;然后逗B的以为哈希是有bug

liwei的专栏 1590

【Zabbix实战之部署篇】Docker部署Zabbix+grafana监控平台

【Zabbix实战之部署篇】docker部署Zabbix+grafana监控平台

jks212454的博客 2577

【哈希+二分】POJ 2774 Long Long Message

POJ 2774 Long Long Message 题意:给两个字符串,问相同子串的最大长度。 思路:首先最大长度肯定是在短的字符串长度(记为_min)之内的,这个不可置疑。所以我们对_min进行二分。至于那怎么更新二分区间呢?也就是judge函数怎么来写?我们将较长字符串的长度为mid的子串哈希值存起来,然后再遍历较短字符串长度为mid的子串哈希值【直接lower_bound即可】。【这...

L_X_ 1765

Windows下超详细安装Anaconda3以及jupyter notebook

1.下载Anaconda安装包 Anaconda官网网站:https://www.anaconda.com/products/individual下载安装包速度比较慢,国内小伙伴不建议尝试。 我们可以使用清华大学开源软件镜像站:清华大学开源软件镜像站:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/,请选择适合自己系统自行下载。 下载完成后如下图: 1.安装Anaconda安装包 1.打开安装包,点击Next 2.点击I Agre

m0_37957160的博客 3801

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Long Long Message poj 2774 哈希+二分

The little cat is majoring in physics in the capital of Byterland. A piece of sad news comes to him these days: his mother is getting ill. Being worried about spending so much on railway tickets (Byt...

Top_Spirit的博客 467

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

POJ-2774 最长公共子串 Hash 二分

Input Two strings with lowercase letters on two of the input lines individually. Number of characters in each one will never exceed 100000. Output A single line with a single integer number – what is ...

刷题记录 299

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Long Long Message 【POJ - 2774】【哈希hash+二分】

题目链接   看到题面发现还不是特别好推的,一开始想法O(N^2)肯定会T,所以就想到了用哈希,然后这道题又是找字符串中的子串,所以哈希直接找就是,我们找中间长度为x的字符串,是否在后面的查询字符串中出现过,若是出现过,说明此时的x还不一定是最优解,继续往下判断。 完整代码: #include &lt;iostream&gt; #include &lt;cstdio&gt; #includ...

既然弱小,就只顾变强就是了 989

[POJ 2774] Long Long Message (字符串哈希+二分)

链接POJ 2774题意给出两个字符串,寻找其最长公共子串。 注意字符串的长度较大,100000。思路字符串哈希典型问题,寻找N个字符串的最长公共子串。对于N个长度不超过L的字符串,哈希可以在O(N*L*log(L))内解决此问题。本题N为2。 做法是对长度进行二分,对每个长度len,可以在线性时间内求出字符串s1中所有长度为len的哈希值,把这些哈希值存在哈希表中。同样对s2求出其长度为len

mysterious 979

POJ 2774 二分+Hash+二分

题意 给定两个字符串(length<=1e5),求最长公共子串。 思路 根据最长公共子串的单调性,可知如果两个串存在长度为k的公共子串,那么必定存在长度为0~k-1的公共子串。 所以我们可以 二分最长公共子串的长度,然后进行验证,即对于串1的长度为len的每个子串,是否在串2中出现,也是二分查找。 #include<iostream> #include<cstd...

Ordinarv 219

Poj2774 二分+哈希

题意:求两个字符串的最长连续公共子序列 思路:开始直接暴力枚举每个长度,结果超时了。所以需要优化代码,第一个想法就是二分,既然要二分那就要证明这两个字符串公共子序列具有单调性,很显然它们是具有单调性的。 代码: #include<stdio.h> #include<iostream> #include<string.h> #include<map> ...

Gee_Zer的博客 318

Poj 2774 二分+字符串hash

题意:给两个长1e5的字符串,求最长公共子串长度 做法:二分答案+hash。hash的思路大概是把字符串看做是p进制数,为了尽可能避免冲突,p取素数31或131等。hash完了排序,通过判断hash值相同来判字符串相同。 代码:#include <cstdio> #include <cstring> #include <algorithm> using namespace std; typede

ACM, deep love 652

POJ-2774 字符串哈希+二分

题意:给出s,t两个字符串,求最长公共子串的长度 思路:首先二分答案x,预处理出s中长度为x的子串哈希值并排序,在t中枚举起点,二分查找t[i...i+x]的哈希值 二分查找直接用binary_search()函数 复杂度其实是nlog方 1 #include<cstdio> 2 #include<cstring> 3 #include...

aoy29758的博客 346

POJ 2774 Long Long Message 哈希+二分

给出两个长度n,mn,mn,m不超过1e51e51e5的字符串,然后求最长的公共子串的长度。 这个长度的上界是min(n,m)min(n,m)min(n,m),对公共子串的长度二分,预处理两个串的哈希值,然后二分判定的时候对其中一个串所有当前二分长度的哈希值排序,另外一个直接放入其中二分。 复杂度是O(nlog2n)O(nlog^2n)O(nlog2n),不是很优秀,但是好写。 在#include...

qq_40859782的博客 247

POJ 2774 Long Long Message (二分 + Hash 求最长公共子串)题解

题意:求最长公共子串 思路:把两个串Hash,然后我们把短的作为LCS的最大可能值,然后二分长度,每次判断这样二分可不可以。判断时,先拿出第一个母串所有len长的子串,排序,然后枚举第二个母串len长度字串,二分查找在第一个母串的子串中存不存在。 代码: #include<cmath> #include<stack> #include<queue>...

weixin_33881753的博客 174
上一篇: UVA 10798 - Be wary of Roses (bfs+hash)
下一篇: Watto and Mechanism CodeForces - 514C hash+枚举
sega_handsome
博客等级 码龄10年 7粉丝 164原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值