LightOJ 1258 Making Huge Palindromes(KMP)
题意
给定一个字符串 \(S\) ,一次操作可以在这个字符串的右边增加任意一个字符。求操作之后的最短字符串,满足操作结束后的字符串是回文。
\(1 \leq |S| \leq 10^6\)
思路
\(\text{KMP}\) 的 \(fail\) 数组是整个算法最重要的东西,能拓展出很多东西。
对于一个模式串(pattern)\(P\) ,\(fail\) 数组为 \(f\) ,那么 \(f[i]\) 就是如果匹配到 \(i\) 这个位置失配,下次去尝试的位置,也就说明了从字符串头到 \(f[i]-1\) 这一段,在 \(i-1\) 位置以左有一段相同的串。这是对 \(fail\) 数组的一种理解,想要更深入的理解,最好的方法就是做题。
本题等价于在 \(S\) 左边删去任意字符使剩下的字符串回文,只需求出字符串 \(S\) 从右开始能得到最长的回文串长度即可。设模式串为 \(S\) 的反字符串 \(P\),回文串长度就是 \(S\) 在最右端能匹配 \(P\) 的最长长度。
代码
#include<bits/stdc++.h>
#define FOR(i,x,y) for(int i=(x),i##END=(y);i<=i##END;++i)
#define DOR(i,x,y) for(int i=(x),i##END=(y);i>=i##END;--i)
typedef long long LL;
using namespace std;
const int N=1e6+5;
char T[N],P[N];
int n,f[N];
int main()
{
int Case;
scanf("%d",&Case);
FOR(cas,1,Case)
{
scanf("%s",T);
n=strlen(T);
FOR(i,0,n-1)P[i]=T[n-i-1];
P[n]='\0';
f[0]=f[1]=0;
FOR(i,1,n-1)
{
int j=f[i];
while(j&&P[i]!=P[j])j=f[j];
f[i+1]=j+(P[i]==P[j]);
}
int j=0;
FOR(i,0,n-1)
{
while(j&&T[i]!=P[j])j=f[j];
if(T[i]==P[j])j++;
if(i==n-1)printf("Case %d: %d\n",cas,n+(n-j));
}
}
return 0;
}
LightOJ 1258 Making Huge Palindromes(KMP)的更多相关文章
- lightOJ 1258 Making Huge Palindromes(KMP)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1258 就是求逆串和原串的匹配长度 答案就是原串长度的2倍减去匹配长度即可 第一次我将原 ...
- LightOJ 1258 Making Huge Palindromes (Manacher)
题意:给定上一个串,让你在后面添加一些字符,使得这个串成为一个回文串. 析:先用manacher算法进行处理如果发现有字符匹配超过最长的了,结束匹配,答案就是该字符前面那个长度加上该串原来的长度. 代 ...
- LightOJ 1033 Generating Palindromes(dp)
LightOJ 1033 Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
- poj2406 Power Strings(kmp)
poj2406 Power Strings(kmp) 给出一个字符串,问这个字符串是一个字符串重复几次.要求最大化重复次数. 若当前字符串为S,用kmp匹配'\0'+S和S即可. #include & ...
- POJ 2406 Power Strings(KMP)
Description Given two strings a and b we define a*b to be their concatenation. For example, if a = & ...
- codeM编程大赛E题 (暴力+字符串匹配(kmp))
题目大意:S(n,k)用k(2-16)进制表示1-n的数字所组成的字符串,例如S(16,16)=123456789ABCDEF10: 解题思路: n最大50000,k最大100000,以为暴力会超时. ...
- LightOj 1265 - Island of Survival(概率)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1265 题目大意:有一个生存游戏,里面t只老虎,d只鹿,还有一个人,每天都要有两个生物碰 ...
- 经典串匹配算法(KMP)解析
一.问题重述 现有字符串S1,求S1中与字符串S2完全匹配的部分,例如: S1 = "ababaababc" S2 = "ababc" 那么得到匹配的结果是5( ...
- URAL 1732 Ministry of Truth(KMP)
Description In whiteblack on blackwhite is written the utterance that has been censored by the Minis ...
随机推荐
- sitecore系统教程之使用修补程序文件自定义Sitecore配置
您可以使用修补程序文件在Sitecore中添加或更改配置设置.Sitecore将修补程序文件与Sitecore.config 文件合并,以创建在运行时使用的配置文件. 本主题描述: 补丁文件放置 补丁 ...
- django2.0 路由规则
Django2.0中URL的路由机制 路由是关联url及其处理函数关系的过程.Django的url路由配置在settings.py文件中ROOT_URLCONF变量指定全局路由文件名称. Django ...
- Hive中实现group concat功能(不用udf)
在 Hive 中实现将一个字段的多条记录拼接成一个记录: hive> desc t; OK id string str string Time taken: 0.249 seconds hive ...
- 【转】Tomcat 快速入门
本文转载自:https://www.cnblogs.com/jingmoxukong/p/8258837.html?utm_source=gold_browser_extension 目录 Tomca ...
- 转:wcf大文件传输解决之道(1)
首先声明,文章思路源于MSDN中徐长龙老师的课程整理,加上自己的一些心得体会,先总结如下: 在应对与大文件传输的情况下,因为wcf默认采用的是缓存加载对象,也就是说将文件包一次性接受至缓存中,然后生成 ...
- jar包读取jar包内部和外部的配置文件,springboot读取外部配置文件的方法
jar包读取jar包内部和外部的配置文件,springboot读取外部配置文件的方法 用系统属性System.getProperty("user.dir")获得执行命令的目录(网上 ...
- DOM jquery
DOM 文档对象模型(Document Object Model)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式.我们最为关心的是,DOM ...
- 使用Wisdom RESTClient如何在Linux和Mac上获取测试报告和API文档?
使用Wisdom RESTClient自动化测试REST API,生成REST API文档, 需要先执行命令java -jar restclient-1.2.jar启动Wisdom RESTClien ...
- jquery photoClip支持手机端,PC端 本地裁剪图片后上传插件
支持手机,PC最好的是jquery photoClip插件,下载地址&示例:https://github.com/topoadmin/photoClip demo.html 代码: <! ...
- Webstorm/Phpstorm中设置连接FTP,并快速进行文件比较,上传下载,同步等操作
Phpstorm除了能直接打开localhost文件之外,还可以连接FTP,除了完成正常的数据传递任务之外,还可以进行本地文件与服务端文件的异同比较,同一文件自动匹配目录上传,下载,这些功能是平常ID ...