题面

传送门

思路

这道题里面有三个主要问题:

1.由“数值相等”变成了“加上一个整数以后数值相等”(减去等价于加负数)

2.由“最多匹配多少位(从第一位开始)”变成了从“任意一位开始匹配”

3.由“单文本串”变成了“多文本串”,而且是文本串内部自己匹配

我们按照难度顺序(3-1-2)来依次解决他们

问题三:多文本串

这个问题是最简单的,因为每个串长度不超过100,最多1000个串

所以,我们搞一个串出来成为模式串,然后用它去匹配剩下的串,结果取min就行了

问题一:数值加上整数相等

这个问题中我们要贯彻一个思想:取不变量

考虑一个序列,当它的每一个元素都增加了一定值以后,什么还是不变的?

没错,相邻元素(或者说任意两个元素)的差值

所以,本题中,我们只要把原来的序列变成长度小了1,元素为原来序列相邻两位之差的新序列来跑匹配,最后把答案加一就好了

问题二:可以从每一位开始匹配

这个问题,在解决了问题三以后也能迎刃而解:数据范围实在是太!小!了!

我们完全可以枚举模式串的开始位置,求出next数组,然后对于剩下的串每一个匹配一下,还能腾出一半的运行时间,大声喊出:

“zcy吊打集训队!”

Code:

// luogu-judger-enable-o2
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
#define inf 1e9
using namespace std;
inline int read(){
int re=0,flag=1;char ch=getchar();
while(ch>'9'||ch<'0'){
if(ch=='-') flag=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9') re=(re<<1)+(re<<3)+ch-'0',ch=getchar();
return re*flag;
}
int a[1010][110],b[110];int N,n,m[1010],fail[110],ans=0,tans=inf,tmp;
int main(){
N=read();int i,j,t1,t2,k,l;
n=read();t1=read();for(i=0;i<n-1;i++) t2=read(),b[i]=t2-t1,t1=t2;
b[n-1]=b[n]=b[n+1]=-inf;
for(j=1;j<N;j++){
m[j]=read();t1=read();
for(i=0;i<m[j]-1;i++) t2=read(),a[j][i]=t2-t1,t1=t2;
a[j][m[j]-1]=a[j][m[j]]=inf;
}
for(k=n-1;k>=1;k--){
memset(fail,0,sizeof(fail));
j=0;tans=inf;
for(i=1;i<k;i++){
while(j&&(b[i]!=b[j])) j=fail[j];
j+=(b[i]==b[j]);fail[i+1]=j;
}
for(l=1;l<N;l++){
j=0;tmp=0;
for(i=0;i<m[l]-1;i++){
while(j&&a[l][i]!=b[j]) j=fail[j];
j+=(a[l][i]==b[j]);
tmp=max(tmp,j);
if(j==k) break;
}
tans=min(tans,tmp);
}
for(i=0;i<k-1;i++) b[i]=b[i+1];b[k]=-inf;
ans=max(ans,tans);
}
printf("%d",ans+1);
}

[SDOI2008][luogu2463] Sandy的卡片 [kmp]的更多相关文章

  1. B【SDOI2008】Sandy的卡片

    时间限制 : 5000 MS   空间限制 : 128000 KB 问题描述 Sandy和Sue的热衷于收集干脆面中的卡片.然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积攒卡片 ...

  2. luogu 2463 [SDOI2008]Sandy的卡片 kmp || 后缀数组 n个串的最长公共子串

    题目链接 Description 给出\(n\)个序列.找出这\(n\)个序列的最长相同子串. 在这里,相同定义为:两个子串长度相同且一个串的全部元素加上一个数就会变成另一个串. 思路 参考:hzwe ...

  3. 「SDOI2008」Sandy 的卡片

    用第一个串建立后缀自动机.然后别的串在上面跑.从根节点开始.如果当前不能转移,一直移到slink或者根.如果移到根,能匹配长度变为0,否则变为maxlen[能转移的点]+1,再转移.转移完往slink ...

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

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

  5. BZOJ 4698: Sdoi2008 Sandy的卡片

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

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

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

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

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

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

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

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

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

随机推荐

  1. 3203 数组做函数参数----排序函数--C语言版

    3203: 数组做函数参数----排序函数--C语言版 时间限制: 1 Sec  内存限制: 128 MB提交: 253  解决: 151[提交][状态][讨论版][命题人:smallgyy] 题目描 ...

  2. FETCH - 用游标从查询中抓取行

    SYNOPSIS FETCH [ direction { FROM | IN } ] cursorname where direction can be empty or one of: NEXT P ...

  3. css img 等比例自动缩放

    按父容器宽度自动缩放,并且保持图片原本的长宽比 img{ width: auto; height: auto; max-width: 100%; max-height: 100%; }

  4. pandas 常用统计方法

    统计方法 pandas 对象有一些统计方法.它们大部分都属于约简和汇总统计,用于从 Series 中提取单个值,或从 DataFrame 的行或列中提取一个 Series. 比如 DataFrame. ...

  5. Rhadoop安装

    1.ubuntu,hadoop,R,jdk安装好 2.下载Rhadoop项目的的三个包,rmr,hdfs,rHBase存放到Downloads/R. 3.切换到root 4.安装依赖的库 ~R CMD ...

  6. ubuntu jdk install

    1.下载jdk-7u75-linux-x64.tar.gz,默认在/home/csf/Downloads 2.csf@ubuntu:~/Downloads$ sudo mkdir /usr/java ...

  7. 织梦dedecms出现系统基本参数空白或显示Call to undefined function make_hash()

    织梦dedecms出现系统基本参数空白或显示Call to undefined function make_hash() 最新的织梦版本(2018-01-09)修改了include文件夹中的commo ...

  8. eclipse中的字体大小设置和背景色设置

    1.字体大小设置 在basic下选择最后一个TextFont 护眼背景色设置 添加到自定义颜色后点确定 最后一步点apply

  9. kubernetes搭建dashboard报错

    warningconfigmaps is forbidden: User "system:serviceaccount:kube-system:kubernetes-dashboard&qu ...

  10. RPC框架 - thrift 客户端

    -------客户端程序 ------ 下载    下载 thrift 源代码包    下载 thrift 的bin包 准备描述文件(使用源代码包的示例文件)    \thrift-0.10.0\tu ...