摘要:
$hash$+容斥 但是看到这个令人愉快的数据范围还是直接枚举子集吧 首先我们发现$6$这个东西简直是小的可怜,复杂度里肯定有$2^6$的 于是我们可以直接先枚举子集,把所有状态的对应相等的位置有多少对搞出来 因为一个答案在一个集合里被算过那么就一定在子集里被算过 之后我们倒着枚举子集,顺便容斥就好 阅读全文
摘要:
这个题一看就是为后缀家族设计的 我们看到我们要求的这个柿子 $$\sum_{i=1}^n\sum_{j=i+1}^nT_i+T_j 2\times lcp(T_i,T_j)$$ 显然的是前面的那些东西是个定值 就是保证每一个长度都会被其他长度算到,也就是算到$n 1$次 于是把前面那些东西拿出来就是 阅读全文
摘要:
压行真漂亮 首先这肯定是一个$dp$了 设$dp_i$表示$i$结尾的最长不下降子序列的长度 显然我们要找一个$j$来转移 也就是$dp_i=max(dp_j+1)$ 那么什么样的$j$满足条件呢 首先得是$j include include include define re register d 阅读全文
摘要:
被$mhr$的暴力干翻了 这道题做法还是非常好想的 先做一遍差分,在每个串的某尾插入一个特殊字符,再将所有的串拼接在一起 现在的问题就转化为找到一个最长的公共子串使得其出现了$n$次,但是在一个串内出现多次出现只算一次 先考虑一下没有第二个限制的做法 那就是最简单的$SA$+二分了,就是扫一遍$he 阅读全文
摘要:
被慎老师教育数位$dp$怎么写了 看来我数位$dp$的写法太落后了 这道题很显然就是一个$AC$自动机上的数位$dp$,按照套路 我们可以设计$dp[i][j][0/1]$表示匹配了$i$为在自动机上的$j$位置,不卡/卡上界 卡上界是一个很神奇的东西,代表这一位和之前的所有位都和上界相等 如果一个 阅读全文
摘要:
码农题啊 上来先无脑一个$SA$的板子,求出$SA$和$het$数组 我们只需要从$sa[i]\in[a,b]$的所有$i$中找到一个$i$使得$sa[i]$和$rk[c]$之间的最小值最大就好了 但是还必须得满足$sa[i]+lcp 1 include include include define 阅读全文
摘要:
可能是虚树板子题了 首先先把虚树建出来,但是这里和那道虚树的入门题不一样,这里所有的询问点都得在虚树里,所以不会存在那种直接不如栈的点 之后我们考虑一下这个三个要求的东西 第一个操作我们需要统计虚树上每一条边的贡献,即被多少个点对经过,根据乘法原理显然有\((t-sz[x])\times sz[x] 阅读全文
摘要:
可能是最傻的做法了 暴力单调栈+$st$表 首先看到这道题就基本知道这是个$SA$了,先无脑敲上$SA$和求$height$的板子 之后尝试搞一下第一问 发现第一问就是求出满足$lcp(i,j) =k$的$(i,j)$有多少对 我们可以用一个暴力合并的单调栈来做 现在的问题转化为求出$height$ 阅读全文
摘要:
这是一道$SA$的练手好题 建议做之前先去做一下 "2408" 之后你就肯定会做这道题了 首先上面那道题的答案就是 $$\sum_{i=1}^nn+1 sa[i] het[i]$$ 就是对于每一个后缀求出其能产生的子串,之后减掉和之前本质相同的子串 对于这个题,我们需要求出所有前缀的本质不同的子串个 阅读全文
摘要:
求 $$Ans=\prod_{i=1}^N\prod_{j=1}^MFib[(i,j)]$$ 连乘的反演,其实并没有什么不一样 我们把套路柿子拿出来 $$F(n)=\sum_{i=1}^N\sum_{j=1}^M[n|(i,j)]=\left \lfloor \frac{N}{n} \right \ 阅读全文