bzoj4698】的更多相关文章

[BZOJ4698]Sandy的卡片(后缀数组) 题面 讨厌权限题!!! 因为我交不了... 洛谷 题面 做完差之后就是裸的最长公共子串 没了.. 数组往死里开吧... #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #include<set> #inclu…
[BZOJ4698]Sdoi2008 Sandy的卡片 Description Sandy和Sue的热衷于收集干脆面中的卡片.然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积攒卡片兑换超炫的人物模型.每一张卡片都由一些数字进行标记,第i张卡片的序列长度为Mi,要想兑换人物模型,首先必须要集够N张卡片,对于这N张卡片,如果他们都有一个相同的子串长度为k,则可以兑换一个等级为k的人物模型.相同的定义为:两个子串长度相同且一个串的全部元素加上一个数就会变成另一个串.Sandy的卡…
[BZOJ4698][SDOI2008]Sandy的卡片 题面 flag倒了. bzoj 洛谷 题解 首先题目的区间加很丑对吧, 将每个串差分一下,就可以转化为 求: 给定\(N\)个串,求他们的最长公共子串. 怎么办呢,按照后缀数组常用套路 我们用不同的未曾用过的字符将这些串连接起来 我们将\(lcp\)大于\(mid\)的串分组 如果一组内串的个数大于等于\(N\)个,就证明可以\(return\;1\) 否则若没有一组大于等于\(N\)返回\(0\) 代码 #include <iostre…
Sandy的卡片 bzoj-4698 Sdoi-2008 题目大意:题目链接. 注释:略. 想法: 这个题跟一个Usaco的题特别像.我们把这些串差分 现在我们要求的就是公共子串且出现次数不少于$k$的最长长度. 紧接着把这$n$新串拼一起建立后缀数组. 两种做法: 第一种是二分.我们直接二分答案然后暴力扫验证,复杂度为$O(nlogn)$. 第二种就是双指针保证当前指针中间是满足条件的最短区间,顺便用单调队列求区间$ht$最小值即可. Code: #include <iostream> #i…
问题描述 LG2463 BZOJ4698 题解 看到\(n\)个数串,一开始不太好处理,可以很容易想到把这\(n\)个数串连到一起,形成一个大串,但是每个串之间不容易处理. 经过思考,想到在每个串中间加一个不可能出现在原数串中的数,取\(2333\). 对大串做后缀数组,求\(\mathrm{LCP}\). 二分答案,二分长度,区间为\([0,min{M_i}-1]\). \(check\)函数用一个栈来维护\(mid \le hei_i\)的段. 关于最长公共前缀 最长公共前缀LCP一般和ST…
差分后即求多串LCS.先考虑两个串怎么做.对第一个串建SAM,第二个串在上面跑即可,任意时刻走到的节点表示的都是第二个串的当前前缀在第一个串中出现的最长的后缀,具体计算长度时每走一个字符长度+1,跳fail时将长度重设为当前节点maxlen即可. 扩展到多串,同样对第一个串建SAM,后面每个串在上面跑一遍,每走到一个节点就记录当前匹配长度,每个节点对所有串取min,再在所有节点中找max即可.注意每个串跑完时都要按parent树更新一遍节点的记录值,因为能在某点匹配就一定可以在它的所有父亲处以最…
4698: Sdoi2008 Sandy的卡片 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 140  Solved: 55[Submit][Status][Discuss] Description Sandy和Sue的热衷于收集干脆面中的卡片.然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积攒卡片兑换超炫的人物模型.每一张卡片都由一些数字进行标记,第i张卡片的序列长度为Mi,要想兑换人物模型,首先必须要集够N张卡片,对于这…
差分,枚举一个串的所有后缀,暴力在所有其他串中kmp,复杂度$O(nm^2)$. #include<cstdio> const int N=1005; const int M=105; int n,m,t[N][M],f[M]; void eq1(int&a,int b){a=b<a?b:a;} void eq2(int&a,int b){a=a<b?b:a;} void pre(int*t){ int i=0,j=f[0]=-1; while(t[i]){ whi…
https://www.lydsy.com/JudgeOnline/problem.php?id=4698 题意:求N个字符串中最长的相同字串的长度,相同的定义是:两个子串长度相同且一个串的全部元素加上一个数就会变成另一个串. 这题的难点在于相同的定义,在这样的定义下一般的字符串匹配算法就不适用了. 但是可以通过一个操作,将前后相邻的字符串差分形成一个长度为len - 1的差分串,原来的相同下的定义就转为了差分串的完全相同,证明显然. 在这种情况下,再把字符串全部拼接起来,用特殊字符隔开,然后二…
P2463 [SDOI2008]Sandy的卡片 直接二分长度暴力匹配....... 跑的还挺快 (正解是后缀数组的样子) #include<iostream> #include<cstdio> #include<cstring> using namespace std; void read(int &x){ ; ')c=getchar(); +(c^),c=getchar(); } #define N 1002 int n,a[N][N],b[N]; bool…