[BZOJ2806][CTSC2012]熟悉的文章(Cheat)】的更多相关文章

bzoj luogu 题目描述 阿米巴是小强的好朋友. 在小强眼中,阿米巴是一个作文成绩很高的文艺青年.为了获取考试作文的真谛,小强向阿米巴求教.阿米巴给小强展示了几篇作文,小强觉得这些文章怎么看怎么觉得熟悉,仿佛是某些范文拼拼凑凑而成的.小强不禁向阿米巴投去了疑惑的眼光,却发现阿米巴露出了一个狡黠的微笑. 为了有说服力地向阿米巴展示阿米巴的作文是多么让人觉得"眼熟",小强想出了一个评定作文 "熟悉程度"的量化指标\(L_0\).小强首先将作文转化成一个01串.之后…
题目 P4022 [CTSC2012]熟悉的文章 题目大意:多个文本串,多个匹配串,我们求\(L\),\(L\)指(匹配串中\(≥L\)长度的子串出现在文本串才为"熟悉",使得匹配串整个近似"熟悉")的最大值 近似"熟悉":将匹配串分割,所有串总"熟悉"长度有\(90\%\)以上 做法 首先明确一点,\(L_1<L_2\),则\(L_1\)的熟悉程度\(≥L_2\)的熟悉程度 比如文本串\('adc'\),匹配串\('a…
题目描述 阿米巴是小强的好朋友. 在小强眼中,阿米巴是一个作文成绩很高的文艺青年.为了获取考试作文的真谛,小强向阿米巴求教.阿米巴给小强展示了几篇作文,小强觉得这些文章怎么看怎么觉得熟悉,仿佛是某些范文拼拼凑凑而成的.小强不禁向阿米巴投去了疑惑的眼光,却发现阿米巴露出了一个狡黠的微笑. 为了有说服力地向阿米巴展示阿米巴的作文是多么让人觉得“眼熟”,小强想出了一个评定作文 “熟悉程度”的量化指标:L 0 .小强首先将作文转化成一个 01 串.之后,小强搜集了各路名家的文章,同样分别转化成 01 串…
题目 好题啊 \(SAM\)+单调队列优化\(dp\) 首先这个\(L\)满足单调性真是非常显然我们可以直接二分 二分之后套一个\(dp\)就好了 设\(dp[i]\)表示到达\(i\)位置熟悉的文章的最大长度 有一个非常显然的\(dp\)方程 \[dp_i=max\{dp_j+i-j\}\ (i-j>=mid)\] 同时\([j+1,i]\)这个子串也得是模式串里的一个子串 对于上面那个\(dp\)方程,我们把\(i\)提出来,用单调队列维护一下\(dp_j-j\)的最大值就好了 下面这个限制…
Problem bzoj 题目大意:给定多个标准串和一个文本串,全部为01串,如果一个串长度不少于\(L\)且是任意一个标准串的子串,那么它是"熟悉"的.对于文本串\(A\),把\(A\)分割成若干段子串,其中"熟悉"的子串的长度总和不少于\(A\)总长度的\(90\%\),那么该\(L\)是可行的.求可行的\(L\)最大值 Solution 前置技能:二分答案.SAM.Dp.单调队列 字符串长在L上下对答案贡献是断崖式的,按套路二分L 再根据对序列分段问题的直觉可…
传送门 首先很容易想到对于所有的模式串建出广义后缀自动机,之后对于我们每一个要检查的文本串,先在SAM上跑,计算出来每一个位置能匹配到的最远的位置是多少.(就是当前点减去匹配长度) 之后--考虑DP--一开始我的状态设错了,设成了当前位置的最大的L的值,这样我就不知道怎么转移了-- 于是换一个思路.考虑到其实我们可以判定L是否成立,于是改为二分答案,那么这次我们就用\(dp[i]\)表示到当前串第i位,已经被匹配为"熟悉"的总字符串长度.这样到最后只要判断一下是否大于90%即可.那么我…
传送门 先将所有模板串扔进广义SAM.发现作文的\(L0\)具有单调性,即\(L0\)更小不会影响答案,所以二分答案. 假设当前二分的值为\(mid\),将当前的作文放到广义SAM上匹配. 设对于第\(1-i\)个字符来说,最少的失配字符数为\(dp_i\),那么\(dp_i = dp_{i-1} + 1\),且如果当前匹配长度\(len \geq mid\),还有转移\(dp_i = \min\limits_{j=i-len}^{i-mid} dp_j\).发现在\(i\)增大的过程中\(i-…
/* 首先答案显然是具有单调性的, 所以可以二分进行判断 然后当我们二分过后考虑dp来求最长匹配个数, 发现每个点能够转移的地点 肯定是一段区间, 然后这样就能够得到一个log^2算法 至于每个点的匹配最长区间, 我们可以预处理出所有地点的最长匹配串 然后发现这个东西可以进行单调栈优化, 原因是往后能往前最大匹配到的点是不会超过前面的, 否则前面那个也会更长 然后就能快乐地一个log了 */ #include<cstdio> #include<algorithm> #include…
题面:洛谷 题解: 观察到L是可二分的,因此我们二分L,然后就只需要想办法判断这个L是否可行即可. 因为要尽量使L可行,因此我们需要求出对于给定L,这个串最多能匹配上多少字符. 如果我们可以对每个位置i求出g[i]表示以这个位置为结尾,向前最多匹配多少位,就可以快速得知任意区间[l, r]是否可以被匹配上,因为一个串如果可以被匹配上,那么它的子串肯定也可以被匹配上. 然后我们再做一次DP,设f[i]为DP到i位,最多能匹配上多少字符 那么朴素做法就是枚举上一段的结尾,然后更新,不过注意到这个决策…
广义后缀自动机+DP 对于作文库建出广义后缀自动机,广义自动机就是在每次添加一个字符串之前把\(last=0\),然后正常添加就好了 对于每个询问串,预处理出每个位置\(i\)能向前匹配的最长长度\(pp[i]\). 二分长度\(L\),对于位置\(i\),设往前匹配到\(j\),满足\(i-pp[i]<=j<=i-L\), 则中间新增的匹配长度为\(i-j\),前面的匹配长为\(f[j]\),则\(f[i]=f[j]+i-j\). 因为\(i\)是每次\(+1\)的,\(pp[i]\)每次有…