题解:

后缀数组

对所有序列差分一下

公共串的长度+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. CC4 表达方式----输赢

    “我要赢,不管付出什么,我一定要赢!”当我赢得时候,“我赢了!(欢呼)”.当我输的时候“不,我不要输.不开心.(垂头丧气)”.这样的场景你是否熟悉呢?我的一生都在经历输赢.以前我会为了赢一场游戏,花费 ...

  2. Eclipse中打包插件Fat Jar的安装与使用

    转自:https://www.cnblogs.com/wbyp/p/6222182.html     Eclipse可以安装一个叫Fat Jar的插件,用这个插件打包非常方便,Fat Jar的功能非常 ...

  3. XGBoost介绍

  4. yarn hadoop-2.3.0 installation cluster Centos 64bits

    Apache Hadoop -2.2.0 - How to Install a Three Nodes Cluster http://tonylixu.blogspot.ca/2014/02/apac ...

  5. android -------- Eclipse下的NDK配置环境

    NDK 全称是Native Development Kit,是一个让开发人员在Android应用中嵌入使用本地代码编写的组件的工具集 原生开发工具包 (NDK) 是一组可让您在 Android 应用中 ...

  6. Confluence 6 设置你的个人空间主页

    不论你是否正在使用个人空间为沙盒来测试一些内容,组合灯显示是如何工作的,一个能够导航到其他空间和内容的页面,或者一些完全不同的东西.下面一些红能够帮助你在你的个人空间中更加有效的使用和发布信息. 使用 ...

  7. android主流开源库

    网络框架:Volley 和 Async Volley特点:能使网络通信更快,更简单.更健壮 Get,Post网络请求及网络图像的高效率 Async:高效的网络数据请求, 解析成json 持久化cook ...

  8. aboutme and my goal

    active, diligent ,work hard now,I am a sophomore,I must workhard ,ecspacially my major ,so , pass CE ...

  9. python-django中间件session源码

    settings.py MIDDLEWARE = [ 'django.contrib.sessions.middleware.SessionMiddleware', ] 1. 看看SessionMid ...

  10. 剑指offer-栈的压入与弹出

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序 ...