nq
  • 2024-07-13【模板】字符串
    字符串哈希素数:13110612e6+931e7+192e7+933e7+231e9+97LL(1e16)+61Zfunctionn=strlen(s+1),m=strlen(t+1);z[1]=n;For(i,2,n,l=0,r=0){ if(i<=r)z[i]=min(z[i-l+1],r-i+1); while(s[z[i]+1]==s[i+z[i]])++z[i]; if(i+z[i]-1>
  • 2024-07-09Exam20240629 赛后结
    Exam20240629赛后结T1想法几乎是对的,结果两个不能直接乘起来就是如果你不太冷静的话就容易做出错误的判断,我考虑了这个问题,居然认为直接乘起来是可以的emmT2不太熟悉容斥,想到前缀和之后扔了结果它这个时候就已经变成slime和npc了这个时候就只需要钦定一段是大于k的其
  • 2024-03-28后缀自动机的一些题目的整理
    后缀自动机的一些题目的整理P3804【模板】后缀自动机(SAM)P3804【模板】后缀自动机(SAM)板子题,没啥好说的。#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintN=2e6+5;inttot=1,last=1,idx,n;intver[N],h[N],ne[N];chars[N];llf[N],ans
  • 2024-01-30SAM & 广义 SAM & SA 学习笔记
    SAM定理SAM由parent树与一张DAG构成,他们共用点集。\(endpos(s)\)表示\(s\)出现的所有位置上最后一个字符所处位置的集合。SAM中DAG上每条路径对应原串上的一个子串,一个子串也与其对应。在SAM的DAG上到达一个点的所有子串的endpos相同。一个节点上储存的最
  • 2024-01-26【板子】后缀自动机(SAM)
    //lg3804//Copyrightyeyou26//注意:这道题不是纯纯的后缀自动机,main函数有一点额外处理#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#defineN(int(2e6+6))intfa[N];intch[N][28];intlen[N];intcnt[N];llans;intidx=1;intnp=1;str
  • 2023-12-13[ARC141C] Bracket and Permutation
    考虑假设已知括号序列\(s\),如何求出\(p,q\)。对于求\(p\),考虑从\(s_1\)到\(s_n\)逐个往里放,如果能放就直接放,肯定不劣,否则就从后面抽最近的左括号放过来,然后继续放。不难证明不存在更优方案,对于\(q\)同理。接下来我们发现,如果\(p\)中存在\(p_i<p_{i-1}\),\(s_{p_{i
  • 2023-04-01后缀自动机
    后缀自动机是通过一个DAG图来存储的,使空间更小,后缀自动机中最关键的一项技术叫做后缀链。1.建立SAMvoidinsert(intc){ newNode(t[last].len+1); intp=last,cur=sz; while(p!=-1&&!t[p].son[c])t[p].son[c]=cur,p=t[p].father; if(p==-1)t[cur].father=0; else{ int
  • 2023-01-30后缀自动机
    后缀自动机的疑难点代码voidsam_extend(charc){intcur=sz++;st[cur].len=st[last].len+1;intp=last;while(p!=-1&&!st[p].next.count(c))
  • 2023-01-18「学习笔记」后缀自动机与广义后缀自动机
    本文仅为方便理解,没有具体证明过程,推荐理解主要原理后去阅读详细证明过程。后缀自动机是一个处理字符串子串相关问题的优秀的算法。引入首先来考虑这样一个问题:如何存
  • 2022-12-31后缀自动机
    时间跨度2weeks,我到现在才刚刚看懂一个构造,果然是过于菜了……时间原因,写得非常潦草而缺少细节,题也还没刷,所以建议点开大佬的链接进行学习qwq啊就各种鹤(%%%KesdiaelKen
  • 2022-10-30【XSY3458】原样输出(SAM)
    考虑判断一个串是否能成为输出,贪心的方法肯定是优先在第一个串的SAM上匹配至匹配不了,再在第二个串的SAM上匹配至匹配不了,……于是可以考虑通过如下方式把\(n\)个串