06 2019 档案
摘要:"题目链接" 建出$sam$,求出parent tree上每个点的$endpos$集合大小。 如果等于$k$,说明到达这个点的都可以。给$(len[fa(i)],len[i]]$的$cnt$都加$1$,差分即可。 cpp include include include using namespace
阅读全文
摘要:"题目链接" 广义sam+不同子串个数。。 找到所有入度为$0$的点开始$dfs$,建出广义sam。 然后就是 "不同子串个数" 了 cpp include include include using namespace std; const int MAXN = 1000010; struct S
阅读全文
摘要:"题目链接" 广义sam。。 cpp include include include using namespace std; const int MAXN = 1000010; struct SAM{ int ch[26]; int len, fa; }sam[MAXN
阅读全文
摘要:很久很久以前 (小学时)那时候我喜欢用这种APP做点任务赚点小钱。就是那种下载一个APP给几毛钱那种。 然后不知道怎么都下载了一个叫《红包锁屏》的APP。 这类APP为了推广,肯定会实行邀请好友奖励政策的。 这个APP也不例外,邀请一个APP奖励$2$元。 就是每个用户都有一个邀请码,如果别的用户下
阅读全文
摘要:"题目链接" 容易发现,可能答案只有$0$、每个数,每个数$+1$ 于是把这$2n+1$个数建立一个权值线段树,可持久化一下,每个节点记录这个子树中最后加入数加入的时间的最小值$latest$(好好理解一下)。 对于查询$(l,r)$,线段树上二分找到最小的$latest include inclu
阅读全文
摘要:"题目链接" 因为每个数都是$10^5$以内,考虑直接用$bitset$维护。 $a b=x$,其实就是看是否有$p$和$p+x$同时存在,直接$bitset$移位按位与一下就好了。 $a+b=x$,这个直接搞不好搞,所以考虑转化。 $$a (N b)=a+b N=x N$$ 其中$N$为一个常数,
阅读全文
摘要:"题目链接" ~~第一道Ynoi~~ 显然每次询问的答案为三个区间的长度和减去公共数字个数 3. 如果是公共数字种数的话就能用莫队+bitset存每个区间的状态,然后3个区间按位与就行了。 但现在是个数,bitset中除了保存每个数是否出现外,还要保存出现的次数。 这时我们发现每个数字的出现次数之和
阅读全文
摘要:"题目链接" 首先拆点,把每个点拆成4个点,表示到达这个点的时候赛车的朝向。 然后考虑连边。 相邻同向并且都是可以走的点直接连边权1的边。 至于怎么转向,只需在每个点$i$向每个方向一直拓展直到不能走为止,如果当前点的深度大于灵敏度,从$i$向这个点的其它3个方向都连一条边权为这个点的深度的边。 然
阅读全文
摘要:"题目链接" 建出$SAM$后,不同子串个数就是$\sum len(i) len(fa(i))$ 因为$SAM$在线的,所以每加入一个字符就能直接加上其贡献,于是这道题就没了。 因为$x$有点大,所以把$ch$改成$map$就行。 cpp include include include includ
阅读全文
摘要:"题目链接" 对第一个串建出$SAM$,然后用第二个串去匹配。 如果能往下走就往下走,不能的话就跳parent tree的父亲,直到能走为止。如果跳到$0$了还是不能走,重新匹配。 cpp include include include using namespace std; const int
阅读全文
摘要:"题目链接" 裸体就是身体。 建出$SAM$,$DAG$上跑$DP$,$f[u]=1+\sum_{(u,v)\in DAG}f[v]$ 答案为$f[1] 1$(因为根节点没有字符) cpp include include include using namespace std; const int
阅读全文
摘要:"题目链接" $$ans=\sum_{1 include include using namespace std; const int MAXN = 1000010; struct SAM{ int ch[26]; int len, fa; }sam[MAXN
阅读全文
摘要:"题目链接" 建出后缀自动机。 T=0,每个子串算一次,否则每个子串算该子串的$endpos$集合大小次。 用$f[i]$表示结点$i$表示的$endpos$集合大小,则$f[i]$为其parent tree的子树的$f$之和(T=0时,f[i]均为1)。 用$g[i]$表示从结点$i$出发的子串个
阅读全文
摘要:"题目链接" cpp include include include using namespace std; const int MAXN = 1000010; struct SAM{ int ch[26]; int len, fa; }sam[MAXN
阅读全文


浙公网安备 33010602011771号