P2463 [SDOI2008]Sandy的卡片

套路都差不多,都是差分后二分答案找lcp。只是这题要把多个串拼接起来成为一个大串,中间用某些值域中没有的数字相隔(最好间隔符都不一样想想为什么),排序后在二分答案,开个栈统计即可(保证单次check复杂度O(N))。

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=+;//m<=101不是m<=100大小没算好坑死我了
template<typename T>inline char MAX(T&A,T B){return A<B?(A=B,):;}
template<typename T>inline char MIN(T&A,T B){return A>B?(A=B,):;}
inline int read(){
int f=,x=;char c;while(!isdigit(c=getchar()))if(c=='-')f=;
while(isdigit(c))x=(x<<)+(x<<)+(c^),c=getchar();return f?-x:x;
}
int a[N],pos[N],bin[N],vis[N],tot;
int n,l,x,ans,tmp,mid,L,R=; int sa[N],h[N],cnt[N],y[N],rk[N],p,m;
inline void suffix_sort(){m=;
for(register int i=;i<=tot;++i)++cnt[rk[i]=a[i]];
for(register int i=;i<=m;++i)cnt[i]+=cnt[i-];
for(register int i=tot;i;--i)sa[cnt[rk[i]]--]=i;
for(register int k=;k<tot;k<<=,p=){
for(register int i=tot-k+;i<=tot;++i)y[++p]=i;
for(register int i=;i<=tot;++i)if(sa[i]>k)y[++p]=sa[i]-k;
for(register int i=;i<=m;++i)cnt[i]=;
for(register int i=;i<=tot;++i)++cnt[rk[y[i]]];
for(register int i=;i<=m;++i)cnt[i]+=cnt[i-];
for(register int i=tot;i;--i)sa[cnt[rk[y[i]]]--]=y[i];
swap(rk,y);rk[sa[]]=p=;
for(register int i=;i<=tot;++i)rk[sa[i]]=y[sa[i]]==y[sa[i-]]&&y[sa[i]+k]==y[sa[i-]+k]?p:++p;
if(p==tot)break;m=p;
}p=;
for(register int i=;i<=tot;h[rk[i]]=p,p?--p:,++i)while(a[i+p]==a[sa[rk[i]-]+p]&&++p);
} inline int check(int k){
for(register int i=;a[sa[i]]<=;++i){
if(h[i]<k){while(x)vis[bin[x--]]=;}
if(!vis[pos[sa[i]]])vis[pos[sa[i]]]=,bin[++x]=pos[sa[i]];
if(x==n)return ;
}
return ;
} int main(){//freopen("tmp.in","r",stdin);
n=read();
for(register int i=;i<=n;++i){
l=read();a[++tot]=read();pos[tot]=i;
for(register int j=;j<=l;++j)a[++tot]=read(),a[tot-]=a[tot]-a[tot-]+,pos[tot]=i;
a[tot]=i+;
}
suffix_sort();
while(L<=R){
mid=L+R>>;
if(check(mid))ans=mid,L=mid+;
else R=mid-;
}
printf("%d\n",ans+);
return ;
}

P2463 [SDOI2008]Sandy的卡片[差分+串拼接后缀数组]的更多相关文章

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

    P2463 [SDOI2008]Sandy的卡片 题意 给\(n(\le 1000)\)串,定义两个串相等为"长度相同,且一个串每个数加某个数与另一个串完全相同",求所有串的最长公 ...

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

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

  3. Luogu P2463 [SDOI2008]Sandy的卡片

    题目链接 \(Click\) \(Here\) 真的好麻烦啊..事实证明,理解是理解,一定要认认真真把板子打牢,不然调锅的时候真的会很痛苦..(最好是八分钟能无脑把\(SA\)码对的程度\(QAQ\) ...

  4. 洛谷P2463 [SDOI2008]Sandy的卡片(后缀数组SA + 差分 + 二分答案)

    题目链接:https://www.luogu.org/problem/P2463 [题意] 求出N个串中都出现的相同子串的最长长度,相同子串的定义如题:所有元素加上一个数变成另一个,则这两个串相同,可 ...

  5. P2463 [SDOI2008]Sandy的卡片

    写一种\(O(nm)\)的做法,也就是\(O(\sum 串长)\)的. 先通过差分转化,把每个数变成这个数与上一个数的差,第一个数去掉,答案就是最长公共子串+1 按照套路把所有串拼起来,中间加一个分隔 ...

  6. [洛谷P2463][SDOI2008]Sandy的卡片

    题目大意:有$n$个字符串,求这$n$个字符串中最长的相似公共字串,相似的定义是加上一个数后相同 题解:差分,建广义后缀自动机,然后求出每个点在多少个字符串中出现过,若在$n$个中都出现,就更新答案 ...

  7. 洛咕 P2463 [SDOI2008]Sandy的卡片

    哈希水过. 首先这是一段delta相同的序列,按照套路差分一下,b[i]=a[i]-a[i-1],然后就是这些序列的最长公共子段 由于数据范围很小,就可以二分,枚举第一个序列的子段然后每个子序列暴力c ...

  8. BZOJ 4698: Sdoi2008 Sandy的卡片 [后缀自动机]

    4698: Sdoi2008 Sandy的卡片 题意:差分后就是多个串LCS SAM+map大法好 模板打错 智力-2 #include <iostream> #include <c ...

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

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

随机推荐

  1. Java 线程第三版 第五章 极简同步技巧 读书笔记

    一.能避免同步吗? 取得锁会由于下面原因导致成本非常高:     取得由竞争的锁须要在虚拟机的层面上执行很多其它的程序代码.     要取得有竞争锁的线程总是必须等到锁被释放后. 1. 寄存器的效应 ...

  2. 多域名THINKPHP利用MEMCACHE方式共享SESSION数据(转)

    一.问题起源 稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一个整体性强的网站,用户系统是统一的,即一套用户名.密码在整个网站的各个模块中都是可以登录使 ...

  3. php程序的三大流程控制

    php程序的三大流程控制 ①  顺序控制(从上到下.从左到右) ②分支控制 if(条件表达式){ //n多语句 }else if (条件表达式){ //n 多语句 }else if(条件表示式){ / ...

  4. 【强网杯2018】Gamebox

    参考: https://www.cnblogs.com/hac425/p/9416787.html http://tacxingxing.com/2018/03/28/2018qwb/ 事后复盘pwn ...

  5. vim与sublime

    vim与sublime 对程序员来说,写代码是再熟悉不过的事情了,windows系统自带有记事本软件,能写写小规模的代码,可是代码量大了,它的局限性就暴露得很明显了:没有语法高亮,没有自动提示,不支持 ...

  6. mongodb的mongod.lock文件及oplog文件

    在mongodb的启动时,在数据目录下,会生成一个mongod.lock文件.如果在正常退出时,会清除这个mongod.lock文件,若要是异常退出,在下次启动的时候,会禁止启动,从而保留一份干净的一 ...

  7. WPF中DATAGRID自定义验证(包含BINDINGGROUP)

    DataGrid在Wpf中的应用是十分广泛的,当你需要表中的信息稍详细的显示出来时,或者我们需要进行某些数据输入时,都有可能采用DataGrid.当然对信息的显示,我们不需要进行验证,但当我们将Dat ...

  8. urllib库python2和python3具体区别

      Python 2 name Python 3 name urllib.urlretrieve() urllib.request.urlretrieve() urllib.urlcleanup() ...

  9. phpstorm pycharm IntelliJ IDEA激活

    phpstorm 和 pycharm server选项里边输入 http://idea.imsxm.com/ IntelliJ IDEA 1. 到网站 http://idea.lanyus.com/  ...

  10. Linux系统初始化流程

    POST-->BIOS(Boot Sequence)-->MBR(bootloader)-->Kernel(initrd)-->/sbin/init(/etc/inittab) ...