正解:SA/哈希+二分

解题报告:

传送门!

啊先放下翻译,,,?大意就有两个字符串,求这两个字符串的最长公共子串

先港SA的做法趴

就把两个子串拼接起来,然后题目就变成了求后缀的最长公共前缀了

所以就跑一下SA的模板就欧克了

只是注意两个细节,,,

一个是因为要求的是两个字符串的最长公共子串,所以要判断一下确保两个子串并不都属于一个串中的

另一个是拼起来的时候要在中间加个特殊字符比如'#'这种的,原因很显然?或者放个hack数据也许更好理解趴QAQ

aaaab

bbbbb

如果不加答案就会是5,然而显然答案是1,自己意会下就好

然后说下二分+哈希

就直接二分一个长度鸭,然后把所有这个长度的找出来,哈希一下,判断是否有相同的就好

具体就先把第一个串的这个长度的串哈希了,然后对第二个串一个个做,每算出一个子串的哈希值就二分查找下

然后get了一个二分查找的函数,,,binary_search

(其实可以直接用lower_bound然后判是否相等来着hhhhh

二分+哈希的代码我没打,,,只写了个SA的就只放SA的代码了QAQ?

#include<algorithm>
#include<iomanip>
#include<cstring>
#include<cstdio>
#include<string>
using namespace std;
#define il inline
#define gc getchar()
#define ll long long
#define ull unsigned ll
#define ri register int
#define rb register bool
#define rc register char
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define my(i,x,y) for(ri i=x;i>=y;--i) const int N=;
int sa[N],x[N],y[N],t[N],n,rk[N],hei[N],str[N],n1,n2,as;
char ch[N]; il bool check(ri gd,ri gs,ri k){return y[gd]==y[gs] && y[gd+k]==y[gs+k];}
il bool jud(ri gd,ri gs){return (gd<=n1 && gs>n1) || (gs<=n1 && gd>n1);}
il void SA()
{
ri m=;
rp(i,,n)++t[x[i]=str[i]];
rp(i,,m)t[i]+=t[i-];
my(i,n,)sa[t[x[i]]--]=i;
for(ri k=;k<=n;k<<=)
{
ri p=;
rp(i,,m)t[i]=;rp(i,,n)y[i]=;
rp(i,n-k+,n)y[++p]=i;
rp(i,,n)if(sa[i]>k)y[++p]=sa[i]-k;
rp(i,,n)++t[x[y[i]]];
rp(i,,m)t[i]+=t[i-];
my(i,n,)sa[t[x[y[i]]]--]=y[i];
swap(x,y);
x[sa[]]=p=;
rp(i,,n)x[sa[i]]=check(sa[i],sa[i-],k)?p:++p;
if(p>=n)break;
m=p;
}
rp(i,,n)rk[sa[i]]=i;
ri h=;
rp(i,,n)
{
if(h)--h;
while(str[i+h]==str[sa[rk[i]-]+h])++h;
hei[rk[i]]=h;
}
} int main()
{
// freopen("2774.in","r",stdin);freopen("2774.out","w",stdout);
scanf("%s",ch+);n1=strlen(ch+);rp(i,,n1)str[++n]=ch[i]-'a'+;str[++n]='#';
scanf("%s",ch+);n2=strlen(ch+);rp(i,,n2)str[++n]=ch[i]-'a'+;
SA();
rp(i,,n)if(jud(sa[i-],sa[i]))as=max(as,hei[i]);
printf("%d\n",as);
return ;
}
/*
memcpy比swap快,,,mk
*/

这儿是代码QAQ

POJ2274 Long Long Message 字符串的更多相关文章

  1. node.js 监听message事件 message字符串丢失信息

    const dgram = require("dgram"); const server = dgram.createSocket("udp4"); serve ...

  2. Clairewd's message /// 字符串hash

    题目大意: 给定字符串s 是26个字母对应的密文字母 给定字符串c1 是 密文+部分原文 原文可能缺损 要求将原文补全输出 利用s得到密文字母对应的原字母rs 利用rs翻译c1得到 原文+部分密文c2 ...

  3. hdu 4300 Clairewd’s message 字符串哈希

    Clairewd’s message Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  4. poj 2041 Unreliable Message 字符串处理

    水的问题.直接附着到代码. //poj 2041 //sep9 #include <iostream> using namespace std; char mode[128]; char ...

  5. C# 字符串加密解密方法

    这个是加密的算法的命名空间,使用加密算法前要引用该程序集  System.Security.Cryptography using System;using System.Data;using Syst ...

  6. python开发_python中字符串string操作

    在python中,对于字符串string的操作,我们有必要了解一下,这样在我们的以后的开发中会给我们带来很多方便 下面是我学习的笔记: #python-string #python中的字符串用单引号' ...

  7. JavaScript中字符串类型

    字符串类型 字符串介绍 这是程序里面使用最为广泛的一-种类型.在JavaScript里面, 可以使用单引号,也可以使用双引号: 字符串这种数据类型非常霸道,它和其他数据类型相加都会被转换后才为字符串类 ...

  8. ASP.NET MVC 5 05 - 视图

    PS: 唉,这篇随笔国庆(2015年)放假前几天开始的,放完假回来正好又赶上年底,公司各种破事儿. 这尼玛都写跨年了都,真服了.(=_=#) 好几次不想写了都. 可是又不想浪费这么多,狠不下心删除.没 ...

  9. Android应用安全开发之浅谈加密算法的坑

      <Android应用安全开发之浅谈加密算法的坑> 作者:阿里移动安全@伊樵,@舟海 阿里聚安全,一站式解决应用开发安全问题     Android开发中,难免会遇到需要加解密一些数据内 ...

随机推荐

  1. Unity5 AssetBundle系列——简单的AssetBundleManager

    一个AssetBundle同时只能加载一次,所以实际使用中一般会伴随着AssetBundle包的管理. 下面是一个简单的AssetBundle管理器,提供了同步和异步加载函数: using Unity ...

  2. NLog使用

    NLog的配置文件,文件上面有详细的备注,注意这个配置文件一定要放在NLog.dll的文件夹里 <?xml version="1.0" encoding="utf- ...

  3. AD域部署使用bginfo软件

    实验网络拓扑图: 实验目标: bginfo收集信息服务器通过bginfo软件收集每个域客户端信息录入到SQL server 2008数据库 bginfo软件官网下载地址: https://docs.m ...

  4. [Full-stack] 跨平台大框架 - RN

    前言 React-Redux的大全栈代码复用理论有点意思,给出一个具体的例子:[React] 15 - Redux: practice IM 因为与react内容天然地部分重合,故这里将重点放在了对c ...

  5. actor 内最好不要阻塞

    1. 在使用 akka cluster singleton 时,我需要知道被创建的 singleton proxy 的 actorRef,通过绝对路径加 actorSelection 方法,应该很容易 ...

  6. linux下mysql 文件导入导出

    最近在做mysql的数据导入导出得到的一些经验,记录下. 1.首先要开通导入导出的功能,需要设置一个mysql的配置 可以在 my.conf 文件的最后增加配置项 secure-file-priv=' ...

  7. Linux设备驱动剖析之Input(二)

    分别是总线类型.厂商号.产品号和版本号. 1156行,evbit,设备支持的事件类型的位图,每一位代表一种事件,比如EV_KEY.EV_REL事件等等.BITS_TO_LONGS(nr)是一个宏,假设 ...

  8. xrdp完美实现Windows远程访问Ubuntu 16.04

    前言: 在很多场景下,我们需要远程连接到Linux服务器(本文是Ubuntu),传统的连接主要分为两种. 第一种:通过SSH服务(使用xshell等工具)来远程访问,编写终端命令,不过这个是无界面的, ...

  9. 【BZOJ5210】最大连通子块和 树剖线段树+动态DP

    [BZOJ5210]最大连通子块和 Description 给出一棵n个点.以1为根的有根树,点有点权.要求支持如下两种操作: M x y:将点x的点权改为y: Q x:求以x为根的子树的最大连通子块 ...

  10. 如何利用office绘制施工进度计划横道图?

    在Excel中利用“悬浮的条形图”可以制作简单的横道图.Step1 启动Excel,仿照图1的格式,制作一份表格,并将有关工序名称.开(完)工时间和工程持续时间等数据填入表格中. A1单元格中请不要输 ...