lightOJ 1258 Making Huge Palindromes(KMP)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1258
就是求逆串和原串的匹配长度
答案就是原串长度的2倍减去匹配长度即可
第一次我将原串接在逆串后面然后一次求失败函数得当前串的f[len1](假设当前总串长度为len1)那么答案即为了len1-f[len1],如果f[len1]>=len ,那么答案为len
但是wrong了,,不知道原因
第二次就直接匹配原串和逆串然后就AC了
我把错误代码和正确代码都贴出来,有时间再思考为什么第一个方法错吧,有哪位朋友看到也可以指导,谢啦
错误代码:
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#define maxn 1000005
using namespace std;
char s[maxn];
char s1[maxn*];
int len;
int len1;
int f[maxn*];
void callfail()
{
int i,j=,k=-;
f[]=-;
while(j<len1)
{
if(k==- || s1[j]==s1[k])
{
k++;j++;
f[j]=k;
}
else k=f[k];
}
}
int main()
{
int t;
while(scanf("%d",&t)!=EOF)
{
int iCase=;
while(t--)
{
printf("Case %d: ",iCase++);
s[]='\0';
s1[]='\0';
scanf("%s",s);
len=strlen(s);
for(int i=;i<len;i++)
s1[i]=s[len--i];
s1[len]='\0';
strcat(s1,s);
len1=strlen(s1);
s1[len1]='\0';
callfail();
if(f[len1]>=len)
cout<<len<<endl;
else
cout<<len1-f[len1]<<endl;
}
}
return ;
}
正确代码:
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = ;
char a[maxn];
char b[maxn];
int f[maxn]; void callfail()
{
int len= strlen(b);
f[] =-;
int j=,k=-;
while(j<len)
{
if(k==- || b[k]==b[j])
{
k++;j++;
f[j]=k;
}
else k=f[k];
}
}
int kmp()
{
int la = strlen(a);
int lb = strlen(b);
callfail();
int i=,j = ;
while(i<la && j<lb)
{
if(j==- || a[i]==b[j])
{
i++;j++;
}
else j=f[j];
}
return la + lb - j;
} int main()
{
int t;
scanf("%d", &t);
for (int i = ; i <= t; i++)
{
scanf("%s", a);
int l = strlen(a);
for (int j = ; j < l; j++)
{
b[l-j-] = a[j];
}
b[l] = '\0';
printf("Case %d: %d\n", i, kmp());
}
return ;
}
lightOJ 1258 Making Huge Palindromes(KMP)的更多相关文章
- LightOJ 1258 Making Huge Palindromes(KMP)
题意 给定一个字符串 \(S\) ,一次操作可以在这个字符串的右边增加任意一个字符.求操作之后的最短字符串,满足操作结束后的字符串是回文. \(1 \leq |S| \leq 10^6\) 思路 \( ...
- LightOJ 1258 Making Huge Palindromes (Manacher)
题意:给定上一个串,让你在后面添加一些字符,使得这个串成为一个回文串. 析:先用manacher算法进行处理如果发现有字符匹配超过最长的了,结束匹配,答案就是该字符前面那个长度加上该串原来的长度. 代 ...
- Making Huge Palindromes LightOJ - 1258
题目链接:LightOJ - 1258 1258 - Making Huge Palindromes PDF (English) Statistics Forum Time Limit: 1 se ...
- LightOJ 1268 Unlucky Strings(KMP+矩阵乘法+基础DP)
题意 给出字符串的长度 \(n\) ,以及该字符串是由哪些小写字母组成,现给出一个坏串 \(S\) ,求存在多少种不同的字符串,使得其子串不含坏串. \(1 \leq n \leq 10^9\) \( ...
- D - 楼下水题(kmp+Manacher)
D - 楼下水题 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Submit Statu ...
- LightOJ 1033 Generating Palindromes(dp)
LightOJ 1033 Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
- POJ3376 Finding Palindromes —— 扩展KMP + Trie树
题目链接:https://vjudge.net/problem/POJ-3376 Finding Palindromes Time Limit: 10000MS Memory Limit: 262 ...
- Generating Palindromes LightOJ - 1033
Generating Palindromes LightOJ - 1033 题意:添加最少的字符使得给出的字符串成为回文串.输出添加的字符数. 方法:常规区间dp.ans[i][j]表示使得ans[i ...
- LightOJ 1268 Unlucky Strings (KMP+矩阵快速幂)
题意:给出一个字符集和一个字符串和正整数n,问由给定字符集组成的所有长度为n的串中不以给定字符串为连续子串的有多少个? 析:n 实在是太大了,如果小的话,就可以用动态规划做了,所以只能用矩阵快速幂来做 ...
随机推荐
- 获取JVM的dump文件
获取JVM的dump文件的两种方式 1. JVM启动时增加两个参数: #出现 OOME 时生成堆 dump: -XX:+HeapDumpOnOutOfMemoryError #生成堆文件地址: -XX ...
- 什么是https
我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取.所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议. HTTPS简介 HTTPS其实是有两部分组成:HTTP + SSL ...
- RunTime 给类添加属性
RunTime网上有很多人都不知道Runtime到底是干嘛的?有很多博主都是长篇大论给他们讲这个讲那个,我感觉还不如实例来的实在.很简单的一个例子:我们都知道会有这样的需求,未读消息列表的图片上要有一 ...
- Python全栈开发第14天
字符编码 python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill) ASCII(American Standard Code for Information Interc ...
- 微服务--webapi实现,脱离iis,脱离tomcat
前言 微服务,顾名思义就是微小的单一的服务程序,单一流程,单一发布,开发和部署都可独立: 这是我的理解: 但基于web的服务,不管是webservice还是webapi等类似的服务都需要基于iis或者 ...
- IOS-验证码的实现和封装(可以直接调用)
最近对OC中的图像比较感兴趣.随手搞得一个类似验证码的demo.直接贴代码了. 小demo中的VerificationCodeView是继承自UIView的,所以需要用到的时候,可以直接定义一个UIV ...
- vuejs子组件向父组件传递数据
子组件通过$emit方法向父组件发送数据,子组件在父组件的模板中,通过自定义事件接收到数据,并通过自定义函数操作数据 <!DOCTYPE html> <html lang=" ...
- 万能数据库连接类-Oracle、DB2 、Access 、Sql Server
package cc.apps.report; import java.sql.Connection; import java.sql.DriverManager; import java.sql ...
- day001-html知识点总结(二)不常见但很重要的元素汇总
一..vertical-align:设置垂直对齐方式,主要用于: 1.单元格内容的垂直对齐 2.对于行内块级元素,如<img>,设置行内元素的基线相对于该行内块级元素的所在行的基线对齐,例 ...
- How To Use ggplot2
0. Preparation and Introduction ggplot2是R中新颖的数据可视化包,这得益于Leland Wilkinson在他的著作<The Grammar of Grap ...