洛谷 P2463 [SDOI2008]Sandy的卡片 解题报告

P2463 [SDOI2008]Sandy的卡片

题意

\(n(\le 1000)\)串,定义两个串相等为“长度相同,且一个串每个数加某个数与另一个串完全相同”,求所有串的最长公共子串,每个串长\(\le 101\),值域\(\in [0,1864]\)


先差分一下,然后连在一起中间加分隔符建sa

然后dp一下,要用到lcp,复杂度\(O(nm^2+n\log n)\)


Code:

#include <cstdio>
#include <algorithm>
using std::min;
using std::max;
const int N=2e5;
int tax[N],sa[N],Rank[N],sec[N],n,m=2000,hei[N],st[N][18],Log[N];
int s[N],dp[N],L[110],R[110],num,mi[1100];
void Rsort()
{for(int i=1;i<=m;i++) tax[i]=0;for(int i=1;i<=n;i++) ++tax[Rank[i]];for(int i=1;i<=m;i++) tax[i]+=tax[i-1];for(int i=n;i;i--) sa[tax[Rank[sec[i]]]--]=sec[i];
}
bool cmp(int x,int y,int l){return sec[x]==sec[y]&&sec[x+l]==sec[y+l];}
void SuffixSort()
{for(int i=1;i<=n;i++) Rank[i]=s[i],sec[i]=i;Rsort();for(int w=1,p=0;p<n;m=p,w<<=1){p=0;for(int i=n-w+1;i<=n;i++) sec[++p]=i;for(int i=1;i<=n;i++) if(sa[i]>w) sec[++p]=sa[i]-w;Rsort(),std::swap(Rank,sec),Rank[sa[1]]=p=1;for(int i=2;i<=n;i++) Rank[sa[i]]=cmp(sa[i],sa[i-1],w)?p:++p;}//h[i]>=h[i-1]-1;for(int i=1,p=0,j;i<=n;hei[Rank[i]]=p,i++)for(p=p?p-1:p,j=sa[Rank[i]-1];s[i+p]==s[j+p];++p);Log[0]=-1;for(int i=1;i<=n;i++) st[i][0]=hei[i],Log[i]=Log[i>>1]+1;for(int j=1;j<=17;j++){for(int i=1;i<=n-(1<<j)+1;i++)st[i][j]=min(st[i][j-1],st[i+(1<<j-1)][j-1]);}
}
int lcp(int x,int y)
{if(x>y) return lcp(y,x);++x;int d=Log[y+1-x];return min(st[x][d],st[y-(1<<d)+1][d]);
}
int main()
{scanf("%d",&num);for(int las,i=1;i<=num;i++){scanf("%d",mi+i);--mi[i];L[i]=n+1;scanf("%d",&las);for(int bee,j=1;j<=mi[i];j++){scanf("%d",&bee);s[++n]=bee-las+m;las=bee;}R[i]=n++;}m=4000,--n;for(int i=2;i<=num;i++) s[L[i]-1]=++m;SuffixSort();for(int i=1;i<=mi[1];i++) dp[i]=mi[1]+1-i;for(int i=2;i<=num;i++){for(int j=L[i];j<=R[i];j++)for(int k=L[i-1];k<=R[i-1];k++)dp[j]=max(dp[j],min(dp[k],lcp(Rank[k],Rank[j])));}int ans=0;for(int i=L[num];i<=R[num];i++) ans=max(ans,dp[i]);printf("%d\n",ans+1);return 0;
}

2019.2.1

转载于:https://www.cnblogs.com/butterflydew/p/10347173.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351474.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux和windows的进程的虚拟地址空间

昨晚看到了深夜&#xff0c;终于对进程的虚拟地址空间有了个大致的了解&#xff0c;很激动&#xff0c;也很欣慰。回头想来&#xff0c;一个程序员&#xff0c;真的应该知道这些知识&#xff0c;否则还真不太称职。 首先告诉大家&#xff0c;我后面提到的这些知识在《windows核…

安装Red Hat Container Development Kit 2.2版本

当应用程序开发人员或架构师负责探索容器化应用程序提供的可能性时&#xff0c;没有比Red Hat容器开发套件&#xff08;CDK&#xff09;容易的了。 Red Hat CDK具有本地OSX&#xff0c;Linux或Windows环境所需的所有Cloud工具&#xff0c;并且已预先配置了一些容器供您浏览。 …

php_sapi常量,PHP常量PHP_SAPI与函数php_sapi_name()简介,PHP运行环境检测

php_sapi_name() 是用来检测PHP运行环境的函数。该函数返回一个描述PHP与WEB服务器接口的小写字符串。例如&#xff1a;aolserver,apache,apache2filter,apache2handler,caudium,cgi(until PHP 5.3),cgi-fcgi,cli,continuity,embed,isapi,litespeed,milter,nsapi,phttpd,pi3web…

怎么学习正则表达式?(正则的使用心得)

以前使用正则是不会自己去学或者去了解怎么实现正则的语法的&#xff0c;感觉好难懂的样子&#xff0c;于是拖到现在 其实正则不是我想象中的那么难&#xff0c;至少入门还是比较简单。我刚学习了一些比较简单的&#xff0c;谈谈我对正则的理解以及使用心得&#xff0c;希望能帮…

java+解析占位符,如何告诉Spring使用Java映射来解析属性占位符?

Spring提供了一个MapPropertySource,您可以在ApplicationContext的环境中注册(您需要一个大多数ApplicationContext实现提供的ConfigurableEnvironment).解析器(按顺序)使用这些已注册的PropertySource值来查找占位符名称的值.这是一个完整的例子&#xff1a;ConfigurationComp…

UOJ207 共价大爷游长沙

考虑到路径是有向的&#xff0c;不是很好维护。 如果路径无向的话&#xff0c;可以直接转化为链加和查询操作。 既然有向的话&#xff0c;不妨考虑一波hash。 对于一组询问x,y&#xff0c;可以把树划分为两颗子树。 合法显然需要满足 x子树的起点的hashy子树的终点的hash x子树…

mysql select null 0,查询值中为NULL,在MySQL中产生0.00

我有一个动态编写的查询(通过Joomla的OO PHP)将一些值插入MySQL数据库.用户填写的表单上有一个字段用于金额,如果它们留空,我希望进入系统的值为NULL.我已经将错误日志中的查询写出来了;这是查询的样子&#xff1a;INSERT INTO arrc_Voucher(VoucherNbr,securityCode,sequentia…

oracle adf_Oracle ADF移动世界! 你好!

oracle adf您好&#xff0c;ADF Mobile&#xff0c;世界&#xff01; 您可能已经知道... ADF Mobile在这里&#xff01; 以下是一些链接&#xff0c;这些链接会让您有宾至如归的感觉。 ADF Mobile主页&#xff1a; http://www.oracle.com/technetwork/developer-tools/adf/o…

线段树||BZOJ1593: [Usaco2008 Feb]Hotel 旅馆||Luogu P2894 [USACO08FEB]酒店Hotel

题面&#xff1a;P2894 [USACO08FEB]酒店Hotel 题解&#xff1a;和基础的线段树操作差别不是很大&#xff0c;就是在传统的线段树基础上多维护一段区间最长的合法前驱&#xff08;h_&#xff09;&#xff0c;最长合法后驱&#xff08;t_&#xff09;&#xff0c;一段中最长的合…

Linux内存管理详解

前一段时间看了《深入理解Linux内核》对其中的内存管理部分花了不少时间&#xff0c;但是还是有很多问题不是很清楚&#xff0c;最近又花了一些时间复习了一下&#xff0c;在这里记录下自己的理解和对Linux中内存管理的一些看法和认识。 我比较喜欢搞清楚一个技术本身的发展历程…

JavaOne 2016 Essentials:7个您不容错过的事件和会话

参加JavaOne吗&#xff1f; 确保您不会错过这些活动 又到了每年的这个时候。 旧金山一年一度的Java假期即将来临&#xff0c;全市发生了超过400场会议和活动。 由于所有这些内容和新体验都一次发生&#xff0c;因此很容易就无法跟踪正在发生的事情。 在这篇文章中&#xff0c…

任务18:控制反转

控制反转 实现你的依赖&#xff0c;采用什么依赖&#xff0c;不由你自己决定&#xff0c;这个控制交给IOC容器。 这里所有的实现都不由你自己决定&#xff0c;我们只需要传给你就可以了。谁来传呢&#xff1f;容器来传给他 内存的Repository&#xff0c;这里实现的比较简单。 这…

程序的重定位问题(程序装入)

在多道程序环境下&#xff0c;要使程序运行&#xff0c;必须先为程序创建进程。而创建进程的第一件事就是&#xff1a;将程序和数据装入内存。如何将一个用户源程序变成可在内存中执行的程序&#xff0c;通常都要进过几个步骤&#xff1a;1.编译&#xff1a;由compiler将源程序…

matlab频响优化,MATLAB中关于频响图函数最优化的程序问题

我是一名大四的学生,现在正在做毕业设计,因MATLAB从未学过,也是边学边做,我需要求出IGv函数的频率响应图,因IGv的表达式很复杂,这里我没列出,在下面的程序中有的,以下是我的程序,请高手帮我看看程序有什么问题哈,万分感谢!%%igmax is global maximumIgmin1000000000;%%exmperim…

杂项-事务:OLTP(联机事务处理过程)

ylbtech-杂项-事务&#xff1a;OLTP&#xff08;联机事务处理过程&#xff09;On-Line Transaction Processing联机事务处理过程(OLTP)也称为面向交易的处理过程&#xff0c;其基本特征是前台接收的用户数据可以立即传送到计算中心进行处理&#xff0c;并在很短的时间内给出处理…

dvd管理器java,简单DVD管理-java练习题

问题描述为某音像店开发一个迷你DVD管理器&#xff0c;最多可存6张DVD,实现碟片的管理。管理器具备的功能主要有&#xff1a;1、查看DVD信息。菜单选择查看功能&#xff0c;展示DVD的信息。2、新增DVD信息选择新增功能&#xff0c;根据提示输入新增的DVD名称&#xff0c;添加到…

从hello world 说程序运行机制

开篇 学习任何一门编程语言&#xff0c;都会从hello world 开始。对于一门从未接触过的语言&#xff0c;在短时间内我们都能用这种语言写出它的hello world。 然而&#xff0c;对于hello world 这个简单程序的内部运行机制&#xff0c;我相信还有很多人都不是很清楚。hello wor…

webapp支持什么数据库_数据库和Webapp安全

webapp支持什么数据库威胁模型 这是根据我网站上的快速参考页松散地讨论数据库和webapp安全的问题。 该页面变得笨拙&#xff0c;并且使读者无法轻松地与我或其他人进行交互。 威胁模型 所有安全分析必须从检查威胁模型开始。 威胁模型要求您回答四个问题&#xff1a; 我要…

开发进度3

对于将软件变为小程序上&#xff0c;还是无法成功&#xff0c;需要继续寻找相关资源学习 转载于:https://www.cnblogs.com/NCLONG/p/10419840.html

matlab排序函数 下标,MATLAB排序函数 - 小众知识

>> Amagic(3)A 8 1 63 5 74 9 2>> sort(A)ans 3 1 24 5 68 9 7>> sort(A,1)ans 3 1 24 5 68 9 7>> sort(A,2)ans 1 6 83 5 72 4 9Matlab中给一维向量排序是使用sort函数&#xff1a;sort(A)&#xff0c;排序是按升序进行的&#xff0c;其中A为待排序的…