当前位置: 首页 > article >正文

BZOJ 4698: Sdoi2008 Sandy的卡片

这道题看到加几个数就能变成另一个数就知道是差分啦,然后显而易见的就是最后的答案为所有串的最长公共串+1,那我们之后怎么办呢,我们先对所有串建一个广义后缀自动机,然后在自动机上搜寻每一个单词,对单词的每一个节点一直跳parent指针,路径上每一个点的次数加一,统计出所有访问次数为字符串总数的长度最大值就好啦,为了不重复访问,我们将每一个点弄一个标记,为了防止繁琐的清空操作,弄一个时间戳就好啦。我这个傻逼一开始还以为只要把开头变成零就不用加一了-_-

#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<cstring>
#include<string>
#include<iostream>
#include<iomanip>
#include<algorithm>
#include<map>
using namespace std;
struct sam
{map<int,sam*> son;sam* parent;int v;int time_clock;int max_len;sam(int _=0):max_len(_),parent(0x0),v(0){}
}*root=new sam(),*last=root;
int ans=0;
int n;
void my_insert(int x)
{sam *p=last;sam *np=new sam(p->max_len+1);while(p && !p->son[x]){p->son[x]=np;p=p->parent;}if(!p) np->parent=root;else{sam *q=p->son[x];if(q->max_len==p->max_len+1) np->parent=q;else{sam *nq=new sam(p->max_len+1);nq->parent=q->parent;nq->son=q->son;q->parent=nq,np->parent=nq;while(p && p->son[x]==q){p->son[x]=nq;p=p->parent;}}}last=np;
}
int a[1001][1001];
int len[1001];
void my_search()
{for(int i=1;i<=n;i++){sam *o=root;for(int j=1;j<=len[i];j++){int x=a[i][j]-a[i][j-1];if(j!=1){while(o && !o->son[x]) o=o->parent;o=o->son[x];sam *p=o;while(p && p->time_clock!=i){p->v++;if(p->v==n) ans=max(ans,p->max_len);p->time_clock=i;p=p->parent;}}}}
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&len[i]);last=root;for(int j=1;j<=len[i];j++){scanf("%d",&a[i][j]);int x=a[i][j]-a[i][j-1];if(j!=1)my_insert(x);}}my_search();printf("%d",ans+1);return 0;
}
http://www.lryc.cn/news/2414619.html

相关文章:

  • AfxBeginThread和CreateThread具体区别
  • 将 Notepad++ 或 Ultra Edit 添加到鼠标右键菜单
  • 深入了解在Linux中重命名文件和目录的技巧!
  • 关于 DRM 中 DUMB 和 PRIME 名字的由来
  • VirtualBox
  • Word公式编辑器的使用方法
  • 服务器租用一年需要多少钱?
  • 学生成绩管理系统的设计与实现-附源码070942
  • 行列式的几种运算方法
  • 从linaro下载安装二进制文件安装交叉编译工具
  • BCR认证是什么?
  • answer的汉语_Answer的中文意思是什么?
  • 进程间的通信方式(六种)
  • rails 入门笔记
  • 【史上最全,从经典到最新】24种信号分解方法(附matlab代码)
  • N2N组建虚拟局域网
  • USB驱动(一、概念介绍及USB总线驱动程序代码分析)
  • element日期选择器datepicker用法大全
  • UCOS-III 操作系统深度剖析与实战应用教程
  • Arrays.sort()的用法
  • 滚动条样式锦集
  • 2024年最新网络安全行业名词_失陷主机(1)
  • 前端入门之HTML与CSS
  • uaa认证服务流程
  • 认识headers
  • 揭秘Android Tombstone:崩溃位置的秘密研究-Crash Location
  • 使用ShellExecute函数实现以管理员身份运行程序
  • 常用配置文件-ini文件
  • JAVA静态变量是什么
  • 最短路径算法汇总