首页 > 其他分享 >题解 [POI2005] SZA-Template

题解 [POI2005] SZA-Template

时间:2023-08-08 09:33:14浏览次数:48  
标签:POI2005 题解 SZA int 印章 字符串 fail border dp

题目链接

充分暴露出对 \(border\) 结合 \(dp\) 理解的不足。

先来推结论,一个字符串的印章一定是其 \(border\),因为只有这样才可能兼顾首尾,但是他的 \(border\) 不一定是其印章,两个条件不能互推。

设 \(dp_i\) 表示前 \(i\) 个字符串的最小印章长度。现在考虑如何转移。

\(dp_i\) 的取值只有可能是 \(i\) 和 \(dp_{fail_i}\),\(i\) 就是取自己为印章,\(dp_{fail_i}\) 表示先将其 \(border\) 想办法填出来,然后再在末尾加上剩余字符。

那么什么时候能从 \(dp_{fail_i}\) 转移过来呢,首先找到一个最大的
\(dp_j=dp_{fail_i}\),由于在 \(j\) 后面我们至多填上 \(dp_{fail_i}\) 长度的字符串,所以当 \(i-j\le dp_{fail_i}\) 时,可以转移。对于合法的 \(j\),维护一个 \(dp\) 值对应的最大下标即可。

点击查看代码
const int N=5e5+10;
string s;
int n;
int fail[N];
int maxp[N],dp[N];
int main() {
    cin>>s;
    n=s.size(); s=" "+s;
    for(int i=2;i<=n;i++) {
        int j=fail[i-1];
        while(s[j+1]!=s[i]&&j) j=fail[j];
        if(s[j+1]==s[i]) fail[i]=j+1;
    }
    for(int i=1;i<=n;i++) {
        dp[i]=i;
        maxp[dp[i]]=i;
        if(!dp[fail[i]]) continue;
        if(i-maxp[dp[fail[i]]]<=dp[fail[i]]) {
            dp[i]=dp[fail[i]];
            maxp[dp[i]]=i;
        }
    }
    cout<<dp[n];
    return 0;
}

标签:POI2005,题解,SZA,int,印章,字符串,fail,border,dp
From: https://www.cnblogs.com/zhangyuzhe/p/17613305.html

相关文章

  • BZOJ3337 ORZJRY I 题解
    https://vjudge.net/problem/黑暗爆炸-3337题意试维护一个序列,支持以下\(11\)种操作:输入格式说明1xw在\(a_x\)后插入\(w\)2x删除\(a_x\)3xy翻转\((a_x,a_{x+1},\dots,a_y)\)4xyk将\((a_x,a_{x+1},\dots,a_y)\)右移\(k\)次......
  • CF671D Roads in Yusland 题解
    题目链接题目要求我们求出选出若干条路径并最小化花费,如果这是在链上,我们可以考虑直接枚举每条路径的右端点dp,那树呢?把路径剖分整个覆盖的集合就不一定连续了,没法dp,况且题目里给了很强的条件:路径一定是从孩子到祖先,硬转链用不上这个性质,貌似不太对。上述思考启发我们利用树的......
  • “科大国创杯”2023 年安徽省青少年信息学科普日活动 简要题解
    “科大国创杯”2023年安徽省青少年信息学科普日活动简要题解小学组T1grade直接累加即可。不需要按百分比算(也就是别/100),那样可能会出现一些浮点数误差。T2order暴力枚举t就可以了T3string答案即为cnt4+cnt5-cnt20。注意到对于一个数,我们只关心其个位和十位就......
  • 打开电脑中应用程序及问题解决方案
    1、使用os.system()函数:示例代码importosos.system("notepad.exe")这将在Windows系统上打开记事本应用程序。2、使用subprocess示例代码:importsubprocesssubprocess.Popen(['notepad.exe'])3、使用webbrowser示例代码:importwebbrowserwebbrowser.open('http://www.goog......
  • 【题解】 Pattern Matching in A Minor "Low Space" CCPC Mianyang 2022
    https://vjudge.net/contest/573644#problem/K字符串匹配,但卡空间。考虑哈希做法,不妨把\(s\)每\(20000\)个字符哈希成一个字符,于是\(s\)长度只有\(500\),可以跑个KMP。于是对于\(t\),我们只需要同时维护\(20000\)个KMP的指针。但如果字符串长度不是\(20000\)的倍......
  • P9498 「RiOI-2」equals题解
    题目传送门:P9498「RiOI-2」equals-洛谷|计算机科学教育新生态(luogu.com.cn)这是洛谷月赛Div.2T3,由于我比较菜,只能赛场上切到T3(T4是黑。),开题我们很容易就看出这道题首先需要初始化每个点到根节点的最短路,而且边权都为1,所以我们先无脑打一个堆优化的dijkstra,剩下的就是处......
  • P1005 [NOIP2007 提高组] 矩阵取数游戏题解
    题面传送门:P1005[NOIP2007提高组]矩阵取数游戏-洛谷|计算机科学教育新生态(luogu.com.cn)分析题目可知,这道题是一道求最值的问题,第一次看题没有认真读题,以为是每次只在某一行中选一个数,于是想了半天无果。重新读题才发现每次需要每行都取,那么这就很简单了,相当于在每一行......
  • 洛谷 P1336 最佳课题选择 题解
    P1336最佳课题选择题解状态:考虑\(f_{i,j}\)表示前\(i\)种论文里面,一共写了\(j\)篇,的最少花费时间。转移策略:我们一次考虑每一种论文写多少篇。假设写\(k\)篇,\(k\in[0,j]\cap\mathbb{Z}\),有转移方程:\[f_{i,j}=min(f_{i-1,j-k}+cost(i,k)),k\in[0,j]\cap\mathbb{......
  • RTSP/Onvif视频服务器LntonNVR(源码版)视频平台无法通过Onvif控制摄像头云台的问题解决
    LntonNVR视频边缘计算网关平台是我们推出的软硬一体的视频平台,既有软件版本,又有硬件版本。LntonNVR与摄像头连接时,可以通过平台自带的Onvif探测进行设备探测、连接,还能实现对摄像头的PTZ云台控制,包括镜头转向、变焦等操作。通过Onvif控制云台是非常实用的功能,在很多用户实际项目中......
  • 国标GB28181视频平台LntonGBS(源码版)国标平台出现录像无法播放并存在RTMP重复推流现象
    LntonGBS国标视频云服务通过支持国标GB28181协议,实现了设备接入、实时监控直播、录像、语音对讲、云存储、告警、级联等功能。同时,它还支持将接入的视频流以多种格式(包括RTSP、RTMP、FLV、HLS、WebRTC)进行全终端、全平台分发,实现了无插件播放在Web浏览器、手机浏览器、微信端、PC客......