4698: Sdoi2008 Sandy的卡片

题意:差分后就是多个串LCS


SAM+map大法好

模板打错 智力-2

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <map>
using namespace std;
typedef long long ll;
const int N=2005;
inline int read(){
char c=getchar();int x=0,f=1;
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
} namespace sam{
struct meow{map<int, int> ch; int par, val;} t[N];
int sz=1, last=1, root=1;
void extend(int c) {
int p=last, np=++sz; t[np].val=t[p].val+1;
for(; p && !t[p].ch[c]; p=t[p].par) t[p].ch[c]=np;
if(!p) t[np].par = root;
else {
int q = t[p].ch[c];
if(t[q].val == t[p].val+1) t[np].par = q;
else {
int nq = ++sz; t[nq]=t[q]; t[nq].val=t[p].val+1;
t[q].par = t[np].par = nq;
for(; p && t[p].ch[c]==q; p=t[p].par) t[p].ch[c] = nq;
}
}
last=np;
}
int c[N], a[N], ans[N];
void RadixSort() {
for(int i=0; i<=sz; i++) c[i]=0;
for(int i=1; i<=sz; i++) c[t[i].val]++;
for(int i=1; i<=sz; i++) c[i] += c[i-1];
for(int i=sz; i>=1; i--) a[ c[t[i].val]-- ]=i;
for(int i=1; i<=sz; i++) ans[i] = t[i].val;
} int f[N]; // max lenth
void solve(int *s, int n) { //puts("\n solve");
int u=root, now=0;
for(int i=1; i<=n; i++) {
int c = s[i]; //printf("i %d %d\n",i,c);
if(t[u].ch.count(c)) u=t[u].ch[c], f[u] = max(f[u], ++now);
else {
while(u && !t[u].ch.count(c)) u=t[u].par;
if(!u) u=root, now=0;
else now=t[u].val, u=t[u].ch[c], f[u] = max(f[u], ++now);
}
}
for(int i=sz; i>=1; i--) {
int u=a[i]; ans[u] = min(ans[u], f[u]); //printf("f %d %d\n",u,f[u]);
if(f[u] && t[u].par) f[t[u].par] = t[t[u].par].val;
f[u]=0;
}
}
}
int n, len, s[N], last, x;
int main() {
freopen("in","r",stdin);
n=read();
len=read(); last=read();
for(int i=1; i<len; i++) x=read(), s[i]=x-last, last=x;
len--;
for(int i=1; i<=len; i++) sam::extend(s[i]);
sam::RadixSort();
for(int i=2; i<=n; i++) {
len=read(); last=read();
for(int i=1; i<len; i++) x=read(), s[i]=x-last, last=x;
len--;
sam::solve(s, len);
}
int ans=0;
for(int i=2; i<=sam::sz; i++) ans = max(ans, sam::ans[i]);
printf("%d", ans+1);
}

BZOJ 4698: Sdoi2008 Sandy的卡片 [后缀自动机]的更多相关文章

  1. BZOJ 4698: Sdoi2008 Sandy的卡片 后缀数组 + RMQ + 查分

    题目描述 Sandy和Sue的热衷于收集干脆面中的卡片. 然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积攒卡片兑换超炫的人物模型. 每一张卡片都由一些数字进行标记,第i张卡片的 ...

  2. BZOJ 4698: Sdoi2008 Sandy的卡片(后缀数组+差分+二分答案)

    传送门 解题思路 看到一个子串加一个数字到另一个子串,自然可以想到差分.然后要把所有串都拼起来,求出\(height\)数组后可以二分答案来做,每次二分一个答案后统计一下连续的\(height> ...

  3. BZOJ 4698: Sdoi2008 Sandy的卡片

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

  4. 【刷题】BZOJ 4698 Sdoi2008 Sandy的卡片

    Description Sandy和Sue的热衷于收集干脆面中的卡片.然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积攒卡片兑换超炫的人物模型.每一张卡片都由一些数字进行标记,第 ...

  5. ●BZOJ 4698 Sdoi2008 Sandy的卡片

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4698 题解: 后缀数组,二分这个题还是比较套路的.首先依据题意,把各个串差分以后,用分割符号 ...

  6. [BZOJ4698][SDOI2008]Sandy的卡片(后缀自动机)

    差分之后就是求多串LCS. 对其中一个串建SAM,然后把其它串放在上面跑. 对SAM上的每个状态都用f[x]记录这个状态与当前串的最长匹配长度,res[x]是对每次的f[x]取最小值.答案就是res[ ...

  7. bzoj 4698: Sdoi2008 Sandy的卡片【SAM】

    差分之后用SAM求LCS,然后答案就是LCS+1 #include<iostream> #include<cstdio> #include<cstring> usi ...

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

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

  9. 4698. [SDOI2008]Sandy的卡片【后缀数组】

    Description Sandy和Sue的热衷于收集干脆面中的卡片.然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积 攒卡片兑换超炫的人物模型.每一张卡片都由一些数字进行标记, ...

随机推荐

  1. java线程间通信:一个小Demo完全搞懂

    版权声明:本文出自汪磊的博客,转载请务必注明出处. Java线程系列文章只是自己知识的总结梳理,都是最基础的玩意,已经掌握熟练的可以绕过. 一.从一个小Demo说起 上篇我们聊到了Java多线程的同步 ...

  2. 三分钟使用webpack-dev-sever搭建一个服务器

    webpack-dev-server是一个小型的Node.js Express服务器,我们可以通过它搭建一个本地服务器,并且实现文件热更新; 1.切换到你的目录下对项目进行初始化 npm init 一 ...

  3. [国嵌攻略][164][USB驱动程序设计]

    USB驱动模型 1.USB host controller driver(主控器驱动):为USB主控制器提供驱动程序 2.USB core(USB核心):连接USB主控制器驱动和USB设备驱动 3.U ...

  4. python基础1 day2

    一.上节课回顾1. 编译型: 将源码一次性全部编译成二进制. C 优点:执行效率高. 缺点:开发效率慢,不可跨平台使用. 解释型: 当程序执行时,代码一行一行的去解释成二进制. python 优点:开 ...

  5. MySql 修改外键 支持级联删除

    首先必须要有外键,InnoDB甚么的都不说了,直接上修改句子. 要先删除该外键,然后添加. 具体原因貌似是因为不支持alter外键的操作. ALTER TABLE `t_terminal` DROP ...

  6. [知了堂学习笔记]_牵线Eclipse和Tomcat第一篇 —— 配置Java环境变量&&安装eclipse

    一.先给他们提供一个"浪漫的"环境,比如传说中的"鹊桥"--java环境变量.哈哈! 配置java环境变量. 下载jdk,根据自己电脑的版本和操作位数选择不同的 ...

  7. Github终于连上了hexo

    2018-01-2722:59:28 我的妈呀,看看这感人的网速,哎不想吐槽在中国连外网的速度 总结一下连接过程吧 漫漫长征路,难的要死. 一.github的注册和使用不再详述 二.Git Desk ...

  8. word中正文分栏重新换页问题

    小论文常需要正文分栏,但是标题.摘要不分栏的编排格式. 1.在摘要后面加入分隔符来将内容分为摘要和正文两个部分.选择 插入→分隔符→分节符(连续). 2.然后进行分栏.选择 格式→分栏. 3.此时如果 ...

  9. rpc-远程调用框架

    简单框架编写 http://blog.csdn.net/u013177446/article/details/67638021 netty解决拆包粘包问题 http://www.cnblogs.com ...

  10. 获取客户端登录ip地址

    request方法客户端IP: request.getRemoteAddr()  输出:192.168.0.106 客户端主机名:request.getRemoteHost()输出:abc 在JSP里 ...