Description

XX在进行字符串研究的时候,遇到了一个十分棘手的问题。

在这个问题中,给定一个字符串S,与一个整数K,定义S的子串T=S(i, j)是关于第K位的识别子串,满足以下两个条件:

1、i≤K≤j。

2、子串T只在S中出现过一次。

例如,S="banana",K=5,则关于第K位的识别子串有"nana","anan","anana","nan","banan"和"banana"。

现在,给定S,XX希望知道对于S的每一位,最短的识别子串长度是多少,请你来帮助他。

Input

仅一行,输入长度为N的字符串S。

Output

输出N行,每行一个整数,第i行的整数表示对于第i位的最短识别子串长度。

建SAM,只有right集大小为1的节点对答案有贡献,

若其出现位置右端点为r,此节点可接受的最短串长为x,最长串长为y,

则对(r-x,r]用x更新最小值,对r-k (y<k≤x)则用k更新最小值

用两棵线段树维护答案,分别处理以上两种情况

此题卡内存...

#include<cstdio>
#include<cstring>
const int N=;
int nx[N][],fa[N],l[N],r[N],t[N],q[N],ql=,qr=,d[N],ptr=,pv=,len=;
char s[];
void ins(int w,int pos){
int p=pv,np=++ptr;
t[np]=;
r[np]=pos;
l[np]=l[p]+;
while(p&&!nx[p][w])nx[p][w]=np,p=fa[p];
if(!p)fa[np]=;
else{
int q=nx[p][w];
if(l[q]==l[p]+)fa[np]=q;
else{
int nq=++ptr;
memcpy(nx[nq],nx[q],sizeof(nx[]));
l[nq]=l[p]+;
fa[nq]=fa[q];
fa[q]=fa[np]=nq;
while(p&&nx[p][w]==q)nx[p][w]=nq,p=fa[p];
}
}
pv=np;
}
void build(){
for(int i=;i<=ptr;i++)++d[fa[i]];
for(int i=;i<=ptr;i++)if(!d[i])q[qr++]=i;
while(ql!=qr){
int w=q[ql++];
int u=fa[w];
if(!u)continue;
t[u]+=t[w];
r[u]=r[w];
if(!--d[u])q[qr++]=u;
}
}
int mn[],mn2[];
inline void mins(int&a,int b){if(a>b)a=b;}
void setmin(int l,int r,int x,int*mn){
for(l+=,r+=;l^r^;l>>=,r>>=){
if(~l&)mins(mn[l^],x);
if(r&)mins(mn[r^],x);
}
}
int ans[];
int main(){
memset(mn,,sizeof(mn));
memset(mn2,,sizeof(mn2));
scanf("%s",s);
for(len=;s[len];++len)ins(s[len]-'a',len+);
build();
for(int i=;i<=ptr;i++)if(t[i]==){
int ml=l[fa[i]];
setmin(r[i]-ml+,r[i],ml+,mn);
setmin(r[i]-l[i]+,r[i]-ml,r[i]+,mn2);
}
for(int i=;i<;i++){
int lc=i<<,rc=lc^;
mins(mn[lc],mn[i]),mins(mn[rc],mn[i]);
mins(mn2[lc],mn2[i]),mins(mn2[rc],mn2[i]);
}
for(int i=;i<=len;i++){
ans[i]=mn[i+];
mins(ans[i],mn2[i+]-i);
}
for(int i=;i<=len;i++)printf("%d\n",ans[i]);
return ;
}

bzoj2865 字符串识别的更多相关文章

  1. BZOJ1396 识别子串 和 BZOJ2865 字符串识别

    字符串识别 2865: 字符串识别 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 839  Solved: 261[Submit][Status][D ...

  2. bzoj千题计划319:bzoj2865: 字符串识别(后缀自动机 + 线段树)

    https://www.lydsy.com/JudgeOnline/problem.php?id=2865 同上一篇博客 就是卡卡空间,数组改成map #include<map> #inc ...

  3. 【BZOJ1396】识别子串&【BZOJ2865】字符串识别(后缀自动机)

    [BZOJ1396]识别子串&[BZOJ2865]字符串识别(后缀自动机) 题面 自从有了DBZOJ 终于有地方交权限题了 题解 很明显,只出现了一次的串 在\(SAM\)的\(right/e ...

  4. 用户代理字符串识别工具源码与slf4j日志使用

    User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本.CPU 类型.浏览器及版本.浏览器渲染引擎.浏览器语言.浏览器插件等.UA也成为了, ...

  5. 2018.12.23 bzoj2865&&1396: 字符串识别(后缀自动机+线段树)

    传送门 卡空间差评! 题意简述:给一个字串,对于每个位置求出经过这个位置且只在字串中出现一次的子串的长度的最小值. 解法:先建出samsamsam,显然只有当sizep=1size_p=1sizep​ ...

  6. 【BZOJ-1396&2865】识别子串&字符串识别 后缀自动机/后缀树组 + 线段树

    1396: 识别子串 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 312  Solved: 193[Submit][Status][Discuss] ...

  7. IDA插件栈字符串识别插件

    该插件是一款可以自动识别栈上局部变量为字符串的插件,字符串形式如下,并自动的加上注释                                       如图:可以自动识别栈上的字符串 项目主 ...

  8. 华为机试_字符串识别_Vector的使用;

    第一题:拼音转数字输入是一个只包含拼音的字符串,请输出对应的数字序列.转换关系如下:描述:      拼音        yi  er  san  si  wu  liu  qi  ba  jiu  ...

  9. BZOJ 2865 字符串识别 | 后缀数组 线段树

    集训讲字符串的时候我唯一想出正解的题-- 链接 BZOJ 2865 题面 给出一个长度为n (n <= 5e5) 的字符串,对于每一位,求包含该位的.最短的.在原串中只出现过一次的子串. 题解 ...

随机推荐

  1. Ubuntu16.04 国内更新源

    在修改source.list之前要先备份 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 替换内容到source.list中 阿里云源: ...

  2. SDN前瞻 网络的前世今生

    本文基于SDN导论的视频而成:SDN导论 目前网络层面流行的技术概念:虚拟中心:公有云私有云:数据中心等等. SDN主要的模拟器:Mininet OpenDaylight(Cisco) ONOS(AT ...

  3. 使用 p4-graphs 命令将p4程序依赖关系图形化

    位置:/home/wasdns/p4factory/targets/l2_switch/p4src 命令: cd /home/wasdns/p4factory/targets/l2_switch/p4 ...

  4. 51Nod 1557 两个集合(二分)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1557 题意: 小X有n个互不相同的整数: p1,p2,...,pn .他 ...

  5. QT 正则表达式无效

    背景:写了一个判断IP地址合法的正则表达式,并让它应用在输入框中 代码如下 QRegExp rx_ip("^((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}( ...

  6. Java线程池Executor使用

    合理利用线程池能够带来三个好处.第一:降低资源消耗.通过重复利用已创建的线程降低线程创建和销毁造成的消耗.第二:减少系统对于,外部 服务的响应时间的等待.第三:提高线程的可管理性.线程是稀缺资源,如果 ...

  7. Vue.js 数据绑定语法详解

    Vue.js 数据绑定语法详解 一.总结 一句话总结:Vue.js 的模板是基于 DOM 实现的.这意味着所有的 Vue.js 模板都是可解析的有效的 HTML,且通过一些特殊的特性做了增强.Vue ...

  8. django网站

    https://www.djangoproject.com/download/ 指定版本安装django命令:pip install Django==1.11.8

  9. 聊聊一直困扰前端程序员的浏览器兼容-【JavaScript】

    上篇已经写过浏览器的兼容发展历史以及主流浏览器,主要的css兼容我知道的已全部写到,这篇这篇专攻javascript的兼容. 1.getYear()方法 var year = new Date().g ...

  10. Delphi 简体 繁体 转换

    http://delphi.ktop.com.tw/board.php?cid=30&fid=69&tid=104986 試看看 這個是豬寶寶從網路上抄來的 檢視純文字版列印? fun ...