题解:

后缀数组

对所有序列差分一下

公共串的长度+1就是答案了

二分 扫一遍height即可,..

代码:

#include <bits/stdc++.h>
using namespace std;
const int N=,M=;
int n,mn=2e9,mx=,lt,rt=2e9,mid,ans=,a[N][N],l[N],b[M],id[M];
int tot,vis[N],cnt,sa[M],ta[M],rk[M],ht[M],wa[M],wb[M],ca[M],cb[M];
int check(int k)
{
for (int i=;i<=tot;i++)
{
if (ht[i]<k)
{
memset(vis,,sizeof(vis));
cnt=;
}
if (!vis[id[sa[i]]])vis[id[sa[i]]]=,++cnt;
if (cnt==n)return ;
}
return ;
}
int main()
{
scanf("%d",&n);
for (int i=;i<=n;i++)
{
scanf("%d",l[i]);
for (int j=;j<=l[i];j++)
{
scanf("%d",&a[i][j]);
if (j>)mx=max(mx,a[i][j]-a[i][j-]);
}
rt=min(rt,l[i]);
}
for (int i=;i<=n;i++)
{
for (int j=;j<=l[i];j++)
{
b[++tot]=a[i][j]-a[i][j-];
id[tot]=i;
}
b[++tot]=++mx;
}
for (int i=;i<=tot;i++)mn=min(mn,b[i]);
for (int i=;i<=tot;i++)b[i]=b[i]-mn+,mx=max(mx,b[i]);
memset(ca,,sizeof(ca));
for (int i=;i<=tot;i++)ca[b[i]]++;
for (int i=;i<=mx;i++)ca[i]+=ca[i-];
for (int i=tot;i>=;i--)sa[ca[b[i]]--]=i;
rk[sa[]]=;
for (int i=;i<=tot;i++)rk[sa[i]]=rk[sa[i-]]+(b[sa[i]]!=b[sa[i-]]);
for (int k=;rk[sa[tot]]<tot;k<<=)
{
memset(ca,,sizeof(ca));
memset(cb,,sizeof(cb));
for (int i=;i<=tot;i++)
{
ca[wa[i]=rk[i]]++;
cb[wb[i]=i+k<=tot?rk[i+k]:]++;
}
for (int i=;i<=tot;i++)
{
ca[i]+=ca[i-];
cb[i]+=cb[i-];
}
for (int i=tot;i;i--)ta[cb[wb[i]]--]=i;
for (int i=tot;i;i--)sa[ca[wa[ta[i]]]--]=ta[i];
rk[sa[]]=;
for (int i=;i<=tot;i++)
rk[sa[i]]=rk[sa[i-]]+(wa[sa[i]]!=wa[sa[i-]]||wb[sa[i]]!=wb[sa[i-]]);
}
for (int i=,j=;i<=tot;i++)
{
if (j)j--;
while (b[i+j]==b[sa[rk[i]-]+j])j++;
ht[rk[i]]=j;
}
while (lt<=rt)
{
if (check(mid=(lt+rt)>>))ans=mid+,lt=mid+;
else rt=mid-;
}
printf("%d\n",ans);
}

bzoj4698的更多相关文章

  1. 【BZOJ4698】Sandy的卡片(后缀数组)

    [BZOJ4698]Sandy的卡片(后缀数组) 题面 讨厌权限题!!! 因为我交不了... 洛谷 题面 做完差之后就是裸的最长公共子串 没了.. 数组往死里开吧... #include<ios ...

  2. 【BZOJ4698】Sdoi2008 Sandy的卡片 后缀数组+RMQ

    [BZOJ4698]Sdoi2008 Sandy的卡片 Description Sandy和Sue的热衷于收集干脆面中的卡片.然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积攒卡 ...

  3. 【BZOJ4698】[SDOI2008]Sandy的卡片

    [BZOJ4698][SDOI2008]Sandy的卡片 题面 flag倒了. bzoj 洛谷 题解 首先题目的区间加很丑对吧, 将每个串差分一下,就可以转化为 求: 给定\(N\)个串,求他们的最长 ...

  4. [bzoj4698][Sdoi2008]Sandy的卡片_后缀数组_二分/单调队列_双指针

    Sandy的卡片 bzoj-4698 Sdoi-2008 题目大意:题目链接. 注释:略. 想法: 这个题跟一个Usaco的题特别像.我们把这些串差分 现在我们要求的就是公共子串且出现次数不少于$k$ ...

  5. LG2463/BZOJ4698 「SDOI2008」Sandy的卡片 后缀数组

    问题描述 LG2463 BZOJ4698 题解 看到\(n\)个数串,一开始不太好处理,可以很容易想到把这\(n\)个数串连到一起,形成一个大串,但是每个串之间不容易处理. 经过思考,想到在每个串中间 ...

  6. BZOJ4698 SDOI2008Sandy的卡片(后缀自动机)

    差分后即求多串LCS.先考虑两个串怎么做.对第一个串建SAM,第二个串在上面跑即可,任意时刻走到的节点表示的都是第二个串的当前前缀在第一个串中出现的最长的后缀,具体计算长度时每走一个字符长度+1,跳f ...

  7. 【BZOJ-4698】Sandy的卡片 后缀数组

    4698: Sdoi2008 Sandy的卡片 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 140  Solved: 55[Submit][Stat ...

  8. BZOJ4698: Sdoi2008 Sandy的卡片

    差分,枚举一个串的所有后缀,暴力在所有其他串中kmp,复杂度$O(nm^2)$. #include<cstdio> const int N=1005; const int M=105; i ...

  9. BZOJ4698 差分 + 二分 + SA

    https://www.lydsy.com/JudgeOnline/problem.php?id=4698 题意:求N个字符串中最长的相同字串的长度,相同的定义是:两个子串长度相同且一个串的全部元素加 ...

  10. bzoj4698 / P2463 [SDOI2008]Sandy的卡片

    P2463 [SDOI2008]Sandy的卡片 直接二分长度暴力匹配....... 跑的还挺快 (正解是后缀数组的样子) #include<iostream> #include<c ...

随机推荐

  1. dock容器操作命令

    删除容器 docker rm -f ams 删除镜像 docker rmi -f ams:351 构建镜像 docker build -t ams:351 . 启动容器 docker run  --p ...

  2. 关于video.js不错的一篇博客,

    博客地址: http://www.cnblogs.com/webenh/p/5815741.html

  3. (9)进程---JoinableQueue队列

    消费者模型-->存和取得过程 和Queue队列区别:解决了Queue队列拿取完,程序阻塞不能自动关闭(依靠放入None来解决)的问题--->参见上个例子 put 存入, get 获取 q. ...

  4. [Win10]安装msi时2503,2502错误及其解决

    简述 刚安装了win10系统,在安装TortoiseGit和TortoiseSvn时,这两个软件是.msi后缀的安装文件,在点击安装时老是提示2503,2502错误,因此无法安装上 搜索了下一般都提到 ...

  5. 单分子荧光原位杂交(smFISH)

    single-molecule RNA fluorescence in situ hybridization (RNA smFISH) 单分子荧光原位杂交(smFISH)是一种新的基因表达分析方法,能 ...

  6. 【源码分析】Mybatis使用中,同一个事物里,select查询不出之前insert的数据

    一.问题场景模拟问题:第二次查询和第一次查询结果一模一样,没有查询出我新插入的数据 猜测:第二次查询走了Mybatis缓存 疑问:那为什么会走缓存呢? 1.service方法 @Override @T ...

  7. 配置Tomcat配置路径

    <Host name="localhost" appBase="webapps" unpackWARs="true" autoDepl ...

  8. Confluence 6 指派空间权限概念

    如果你是一个空间的管理员,你可以对空间的使用权限进行控制.你可以为独立用户或者Confluence Groups的权限进行权限的指派/收回. Confluence 管理员可以将用户分配到用户组中,这样 ...

  9. Financiers Game CodeForces - 737D (博弈论)

    直接暴力区间DP的话是$O(n^3)$, 关键注意到每步走的距离差不超过1, 所以差最大是$O(\sqrt{n})$的, 所以实际上有用的状态是$O(n^2)$的, 可以通过.

  10. IQC来料检验报表

    ***************************************************************** * System : XXXXXXXXX * Module : QM ...