真是不管什么时候来做这道题都会觉得很神仙呐。。。

观察一下,如果存在一个合法的印章,那么这个印章一定是这个串的前缀,也是这个串的后缀。

即合法的印章一定是原串的 \(\rm Border\)。

于是设 \(dp[n]\) 为 \([1,n]\) 这个前缀的最短的印章长度。这个印章就是 \([1,dp[n]]\)。

注意到 \(dp[fail[n]]\) 的长度不可能大于 \(dp[n]\),所以 \(dp[n]\) 其实只有两种决策:\(n\) 和 \(dp[fail[n]]\)。

于是开始思考满足什么条件的情况下才能够使用 \(dp[fail[n]]\)。

注意到 \([1,dp[fail[n]]]\) 一定是 \([1,n]\) 的后缀,所以我们假设这个印章已经把这个后缀狂暴轰入了,那么 \([1,n-dp[fail[n]]]\) 还没有被轰入。所以条件就是 \([1,n-dp[fail[n]]+1]\sim [1,n]\) 这几个前缀中的某一个的前缀的 \(dp\) 值为 \(dp[fail[n]]\)。(也就是轰入这个前缀之后,再使用这个印章轰入后缀。)

看似需要维护区间 \(\max\)?其实并不需要,只需要对每一个 \(dp\) 值维护最右边的下标即可。

代码很短,但是思维量是很多的。

#include<cstring>
#include<cstdio>
typedef unsigned ui;
const ui M=5e5+5;
ui n,dp[M],mx[M],fail[M];char s[M];
signed main(){
ui i,j;scanf("%s",s+1);n=std::strlen(s+1);
for(i=1,j=0;i<=n;++i){
if(i==1)fail[i]=0,dp[i]=1,mx[1]=1;
else{
while(j&&s[j+1]!=s[i])j=fail[j];if(s[j+1]==s[i])++j;fail[i]=j;
if(mx[dp[j]]>=i-j)dp[i]=dp[j];else dp[i]=i;mx[dp[i]]=i;
}
}
printf("%u",dp[n]);
}

LGP3426题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. 简单实现Tabbar的隐藏显示动画 By H罗

    简单实现Tabbar的隐藏显示动画 Hide Tabbar Controller with Animation - (void)setTabBarVisible:(BOOL)visible anima ...

  2. CentOS更新VMware Tools及设置共享文件夹

    CentOS设置共享文件夹 设置共享文件夹 点击虚拟机->设置 2. 打开虚拟机设置->选项->共享文件夹->总是启用->添加 3. 点击下一步创建主机路径并命名 4. ...

  3. nodejs并行无关联

    var async = require('async'); //串行无关联series//串行有关联waterfall//并行:parallel //会把各个函数的执行结果一起放到最后的回调中asyn ...

  4. SQL server 查询当前数据库所有表的行数

    SELECT OBJECT_NAME(ii.id) TableName ,rows FROM sysindexes ii INNER JOIN sysobjects oo ON ( oo.id = i ...

  5. SQL 在数据库中查找拥有此列名的所有表

    SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME='Column' #"Column"为要查询 ...

  6. Ceres 四重奏 之 入门简介

    Ceres 翻译为谷神星,是太阳系中的一颗矮行星,于1801年被意大利神父 Piazzi 首次观测到,但随后 Piazzi 因为生病,跟丢了它的运行轨迹. 几个月后,德国数学家 Gauss,利用最小二 ...

  7. mock测试出现Circular view path [trade_records]: would dispatch back to the current handler URL

    这是因为你的Controller中返回的视图名称与你当前的requestMapping名称一样,这并没有很好的解决方案,除非你改掉其中一个名字. 因为springframework test时你并没有 ...

  8. 文件属性信息详述 上( 硬软连接+文件类型+用户&用户组)

    目录 文件属性信息详述 上 一.文件类型概念说明 1.文件详细信息详解 2.inode编号 二.文件软硬链接说明 1.硬链接和软连接 4.删除文件的底层逻辑 5.文件类型 三.文件用户和用户组 1.概 ...

  9. 二、MyBatis基础配置应用实例

    核心配置文件sqlMapConfig.xml Mybatis核心配置文件层级关系 1)environments标签 2)mapper标签 eg: 3)properties标签 数据源配置参数抽取至jd ...

  10. 关于WebStorm 破解

    建议资金宽裕,支持正版 2017.2.27更新 选择"license server" 输入:http://idea.imsxm.com/ 2016.2.2 版本的破解方式: 安装以 ...