hdu-4763(kmp+拓展kmp)

news/2024/8/19 16:17:56

题意:给你一个串,问你满足最大字串既是前后缀,也在字符串除去前后缀的位置中出现过;

思路:我用的是拓展kmp求的前后缀,只用kmp也能解,在字符串2/3的位置后开始遍历,如果用一个maxx保存前2/3的最大的next(kmp),也就是最大字串的前后缀,在与拓展kmp的next[i]进行比较;

代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#define maxn 1000500
using namespace std;
char t[maxn];
int tlen;
int next1[maxn];
int exnext[maxn];
void get_next()
{
int j=0,k=-1;next1[0]=-1;
while(j<tlen)
{
if(k==-1||t[k]==t[j])
next1[++j]=++k;
else
k=next1[k];
}
}
void get_exnext()
{
int i=0,j,po;
exnext[0]=tlen;
while(t[i]==t[i+1]&&i+1<tlen)
i++;
exnext[1]=i;
po=1;
for(int i=2;i<tlen;i++)
{
if(exnext[i-po]+i<exnext[po]+po)
exnext[i]=exnext[i-po];
else
{
j=exnext[po]+po-i;
if(j<0)
j=0;
while(i+j<tlen&&t[j]==t[j+i])
j++;
exnext[i]=j;
po=i;
}
}
}
int main()
{
int tt;
scanf("%d",&tt);
while(tt--)
{ int ans=0;
scanf("%s",t);
tlen=strlen(t);
if(tlen<=2)
{
printf("0\n");
}
else
{
get_next();
get_exnext();
int z=tlen/3;
z=tlen-z;
//cout<<z<<endl;
int maxx=-1;
for(int i=0;i<=z;i++)
{
maxx=max(next1[i],maxx);
}
// cout<<maxx<<endl;
for(int i=z;i<tlen;i++)
{
if(maxx<next1[i])
maxx=next1[i];
if(exnext[i]<=maxx)//答案取拓展kmp的值,因为满足子串前后缀大的不一定满足原串的前后缀大;
{
ans=max(ans,exnext[i]);
}
}
}
printf("%d\n",ans);

}
}

  

---恢复内容结束---

转载于:https://www.cnblogs.com/huangdao/p/9450936.html


http://www.niftyadmin.cn/n/1440828.html

相关文章

Vue TypeError: Cannot read properties of undefined (reading ‘xxxx‘) ,错误原因及解决方案

今天使用Vueaxios 查询数据库信息&#xff0c;并显示。 用到了v-for便签。 axios 也可以正常接收到数据。 但是总是报同一个错误&#xff0c;无法读取未定义的标签。 但是代码中明显有。 TypeError: Cannot read properties of undefined (reading xxxx)错误截图&#xff1a; …

Java实现socket简单通讯传输doc文件或图片

需要通过socket通讯传输word文件&#xff0c;其中word文件中有部分文字与图片&#xff0c;所以就是IO流读取文件再另外一端读写文件打印出来&#xff1b; 1、发送端直接向接收端发送字符流通讯&#xff0c;如下是源码所示&#xff1a; 1 package com.yss.util;2 3 import java.…

决定网站在Google排名的10大因素(转)

决定网站在Google排名有很多因素&#xff0c;但最主要的有以下10大因素&#xff1a; 1、 有多少站点链接到你的网站 2、 你的网站有多少页面 3、 网站标题标记的文字 4、 在链接中显示的关键字 5、 粗体字 6、 URL中的文字 7、 网页的头25个字 8、 首页的字数超过300 9、 关键字…

理解记忆TCP的拥塞控制机制

文章目录拥塞控制的一般原理拥塞控制与流量控制的关系TCP的拥塞控制慢开始和拥塞避免算法的实现举例阶段一&#xff1a;慢开始生长阶段阶段二&#xff1a;拥塞避免阶段阶段三&#xff1a;控制阶段乘法减小加法增大快重传机制快恢复算法拥塞控制的一般原理 在某段时间&#xff…

vue省市区三级联动

仿照小米之家做的一个省市区三级联动&#xff0c;先上代码&#xff1a; HTML&#xff1a; <template><section class"myAddress"><section><section class"cont" click"choseAdd()"><section><span>所在地区…

Microsoft SQL Server 2000 分布式查询:OLE DB 连接(转)

摘要&#xff1a;本文描述了 Microsoft SQL Server 2000 查询处理器如何与 OLE DB 提供程序进行交互以实现分布式和异类查询。它面向的读者主要是 OLE DB 提供程序开发人员&#xff0c;并假设读者对 OLE DB 规范有深入的了解。 目录 简介 概述和术语 OLE DB 提供程序交互阶段 查…

枚举类的使用---使用枚举创建 “ 单例 ”对象

文章目录前言枚举类的实现使用枚举创建单例前言 枚举常用于类的对象有有限个、确定的类。比如说&#xff0c;星期的定义&#xff0c;当需要定义一组常量时&#xff0c;强烈建议使用枚举类。 单例使用的范围也非常的广&#xff0c;如果说mybatis对象的创建等。 本文只要介绍枚…

spring如何利用反射获取注解信息来解析请求地址

文章目录前言自定义注解来标识Controller层和Servlet请求自定义注解标识类利用反射获取注解信息&#xff0c;分发请求获取所有的请求地址处理请求前言 在没有学习spring的时候&#xff0c;通常我们采用servlet来截取请求&#xff0c;然后处理请求获得响应&#xff0c;通常是一…