BZOJ 4698: Sdoi2008 Sandy的卡片 [后缀自动机]
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的卡片 [后缀自动机]的更多相关文章
- BZOJ 4698: Sdoi2008 Sandy的卡片 后缀数组 + RMQ + 查分
题目描述 Sandy和Sue的热衷于收集干脆面中的卡片. 然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积攒卡片兑换超炫的人物模型. 每一张卡片都由一些数字进行标记,第i张卡片的 ...
- BZOJ 4698: Sdoi2008 Sandy的卡片(后缀数组+差分+二分答案)
传送门 解题思路 看到一个子串加一个数字到另一个子串,自然可以想到差分.然后要把所有串都拼起来,求出\(height\)数组后可以二分答案来做,每次二分一个答案后统计一下连续的\(height> ...
- BZOJ 4698: Sdoi2008 Sandy的卡片
4698: Sdoi2008 Sandy的卡片 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 106 Solved: 40[Submit][Stat ...
- 【刷题】BZOJ 4698 Sdoi2008 Sandy的卡片
Description Sandy和Sue的热衷于收集干脆面中的卡片.然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积攒卡片兑换超炫的人物模型.每一张卡片都由一些数字进行标记,第 ...
- ●BZOJ 4698 Sdoi2008 Sandy的卡片
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4698 题解: 后缀数组,二分这个题还是比较套路的.首先依据题意,把各个串差分以后,用分割符号 ...
- [BZOJ4698][SDOI2008]Sandy的卡片(后缀自动机)
差分之后就是求多串LCS. 对其中一个串建SAM,然后把其它串放在上面跑. 对SAM上的每个状态都用f[x]记录这个状态与当前串的最长匹配长度,res[x]是对每次的f[x]取最小值.答案就是res[ ...
- bzoj 4698: Sdoi2008 Sandy的卡片【SAM】
差分之后用SAM求LCS,然后答案就是LCS+1 #include<iostream> #include<cstdio> #include<cstring> usi ...
- 【BZOJ4698】Sdoi2008 Sandy的卡片 后缀数组+RMQ
[BZOJ4698]Sdoi2008 Sandy的卡片 Description Sandy和Sue的热衷于收集干脆面中的卡片.然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积攒卡 ...
- 4698. [SDOI2008]Sandy的卡片【后缀数组】
Description Sandy和Sue的热衷于收集干脆面中的卡片.然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积 攒卡片兑换超炫的人物模型.每一张卡片都由一些数字进行标记, ...
随机推荐
- BZOJ1078: [SCOI2008]斜堆
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1078 每一次进入的点一定是一个极左节点,然后将它所处在的整棵树左右翻转.加上一些情况的处理. ...
- Android中与task相关的几个属性
1.与任务相关的属性 taskAffinity :修改任何给定Activity的关联 系统使用包名标识应用的默认任务关联: taskAffinity属性取字符串值,必须不同于包名: taskAffin ...
- [国嵌攻略][066][ARP协议实现]
以太网通讯 在计算机网络中,数据发送的过程就是把数据按照各层协议层层封装的过程.在这个过程中,最终要使用的协议通常是以太网协议(数据链路层协议). 以太网包格式 目的MAC地址:接收者的物理地址(6字 ...
- AMD规范学习笔记
背景 NodeJS的一套比较简洁 Moudles 规范, 使得在服务器端的模块化变得更加简单.很长一段时间,很多公司或者项目都有自己的一套模块化机制, 却未能形成一套统一的标准, NodeJS的Mou ...
- dedecms环境优化
路径:dedecms/dede/templates/index_body.htm <script type="text/javascript">function sho ...
- 为什么alertView弹出后button会消失的问题
按option后会有提示:Do not use the label object to set the text color or the shadow color. Instead, use the ...
- 【编程技巧】ExtJs 设置GridPanel表格文本垂直居中
详细讲解见 http://blog.csdn.net/li396864285/article/details/9310983 以下是我改修的代码: { width:90, ...
- winform打开本地html页面
有时候为了提高开发效率和后期可维护性,把cs里面嵌套了远程网页,这样方便后期升级.比如,美图秀秀,qq音乐PC都嵌套了本地和远程网页.在页面拖入控件System.Windows.Forms.WebBr ...
- Velocity动态拼接字符串
1.在全局定义一个变量: #set($varName = "") 2.拼接字符串病截取字符串: #foreach( $role in $adminUser.roles) #set( ...
- httpd: Could not reliably determine the server's fully qualified domain name, using ::1 for ServerName
问题原因: httpd服务配置文件,并没有设置解析根地址,无法可靠地确定服务器的完全合格的域名 如何解决? httpd的配置文件放在 /etc/httpd/conf/目录下,去掉ServerName注 ...