正解: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. asp.net ashx一般处理程序实现async await异步操作

    目前项目存在页面展示大量图片,效率不高,考虑优化性能,改为ashx+异步下载的方式,废话不说直接贴code: using System; using System.Web; using System. ...

  2. 【转】WPF自定义控件与样式(7)-列表控件DataGrid与ListView自定义样式

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等. 本文主要内容: DataGrid自定义样式: ListView自定义样式: 二.Dat ...

  3. websphere 删除文件

    META-INF 文件夹下加入ibm-partialapp-delete.props即可 里面添加路径 如WEB-INF/xxx/xxx.xxx

  4. 设计模式-结构型模式,python组合模式

    设计模式上大的方向上分继承和组合,就是类模式和对象模式.此篇的组合模式非继承和组合概念中的组合.桥接 策略 代理 装饰者都用了组合,此组合非彼组合. 组合模式 组合模式(Composite Patte ...

  5. [Algorithm] Polynomial and FFT

    排序:nlogn 二分查找:logn <-- 利用单调性,查n次,每次logn Multiply the following pairs of polynomials using at most ...

  6. memcpy in place 数组内拷贝

    首先看一段代码 #include <stdio.h> #include <pthread.h> int main(){ ]; ; ; i++) { t1[i] = i; pri ...

  7. JavaScript隐藏的坑一,隐式调用toString

    最近在重新学习JavaScript,看动态原型对象的时候,打印了两个用同一个构造函数生成的对象,但是打印结果却不一样,请看代码: var box1=new Box(); console.log(box ...

  8. 132、Android安全机制(2) Android Permission权限控制机制(转载)

    http://blog.csdn.net/vshuang/article/details/44001661 http://www.cnblogs.com/mengdd/p/4892856.html

  9. LeetCode - 386. Lexicographical Numbers

    Given an integer n, return 1 - n in lexicographical order. For example, given 13, return: [1,10,11,1 ...

  10. C#模拟登录后请求查询

    需求是这样子的,想开发一个外挂程序,能够抓取别的系统的数据,从而实现数据验证. 比如这样一个界面: 使用Chrome浏览器分析http请求和响应过程以及页面的html代码,发现这是一个ajax请求,于 ...