摘要: 据说是网络流棋盘模型了 我们把每一个连续子段都看成一个点,我们先把所有的行上的连续子段找出来给他们编上号,所有列上的连续子段找出来也编上号 现在每个格子都有两个编号了,$a[i][j]$表示行所对应的连续子段的编号,$b[i][j]$表示列所对应的连续子段的编号 之后我们就需要把这些子段匹配起来就可 阅读全文
posted @ 2019-01-02 21:19 asuldb 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 好题啊 先考虑一些如何判掉无解的情况 我们开一个桶,存一下每个编号有多少个人必须选,之后做一个后缀和,之后我们扫一遍,如果一旦有一个后缀和$pre[i]$超过$n i+1$就不合法了,因为我们在$[i,n]$这里要安排的人已经超过$n i+1$也就是这个区间的容纳范围了,所以这样放下去肯定会导致超掉 阅读全文
posted @ 2019-01-02 19:41 asuldb 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 发现这个数列的范围特别大但是值域的范围特别小 于是可以大胆猜测这道题值域肯定需要开到状态里去 又发现$262144=2^{18}$这个暗示非常明显啊,暗示这道题跟二进制有关系 其实也没什么关系 设$dp[i][j]$表示从$i$位置开始合并,合并出$j$这个数所合并的区间的尾位置在哪里 之后就会发现 阅读全文
posted @ 2019-01-02 12:24 asuldb 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 听说这是动态开点主席树的板子题,但是发现我还不会,于是就来写一写 其实跟主席树一个样子的 这里就是存个板子吧 cpp include include include include define re register define max(a,b) ((a) (b)?(a):(b)) define 阅读全文
posted @ 2019-01-02 12:24 asuldb 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 非常玄妙的博弈入门 好神仙的题啊 其实这就是经典的$Nim$问题 如果所有石子的异或和为$0$,那么这就是一个必败状态 这个我只会感性理解一下 首先所有的石子都是$0$,异或和肯定是$0$,这也自然是一个必败状态 而如果异或和不是$0$,我们设异或和为$X$ 我们可以找到这个$X$的最高位,显然那些 阅读全文
posted @ 2019-01-02 12:24 asuldb 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 求$\sum_{i=1}^ngcd(i,n)$ 考虑枚举$gcd$,现在答案变成这样 $\sum_{d|n}d f(d)$ $f(d)=\sum_{i=1}^n [gcd(i,n)==d]$ 考虑一下$f(d)$如何求 显然$f(d)=\varphi(n/d)$ 因为所有与$n/d$互质的数乘上$d 阅读全文
posted @ 2019-01-02 12:23 asuldb 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 这是$sa$的经典题目了 我们都知道答案就是 $$\sum_{i=1}^nn+1 sa[i] het[i]$$ 我们尝试理解一下这个东西 首先$n+1 sa[i]$表示的是排名为$i$的这个后缀能形成的子串个数是多少个,也就是从$sa[i]$位置开始的子串 之后减掉$het[i]$表示减掉的是和排名 阅读全文
posted @ 2019-01-02 12:22 asuldb 阅读(747) 评论(0) 推荐(0) 编辑
摘要: $Ac$自动机好题了 这个题要求我们一直无法匹配到结束标记,所以我们直接在$trie$图上找到一个环,这个环可以被根节点到达,之后还没有结束标记 发现自己不会$dfs$找环,于是直接莽上$tarjan$ 之后一直写挂各种$sb$ 代码 cpp include include include incl 阅读全文
posted @ 2019-01-02 12:22 asuldb 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 其实这道题跟 "[AHOI2013]差异" 很像 其实这个问题的本质就是让你算所有后缀的$lcp$长度之和,但是得来自两个不同的字符串 先把两个字符串拼起来做一遍$SA$,由于我们多算了来自于同一个串内的情况 于是在分别对这两个串建$SA$,减掉这两次算出来的答案 现在的问题转化为求出$height 阅读全文
posted @ 2019-01-02 12:21 asuldb 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 好像是最小表示法的板子题呢 但是不会啊,于是就变成了我的第一道$SAM$ 对于这种跟循环同构有关系的题,显然需要将原来的串倍长,之后先插入到$SAM$里去 之后我们在$SAM$上找到贪心访问最小的儿子找到一条长度为$n$的路径就好了 显然因为我们循环同构了,所以从根到根的任何一个转移必然会存在一个长 阅读全文
posted @ 2019-01-02 12:21 asuldb 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 怎么全是广义后缀自动机,我$AC$自动机不服 这道题可以使用的算法很多,$SA$或者$SAM$应该都可以 但是我都不会 但是这毕竟是一个多串匹配问题,$AC$自动机还是可以刚一刚的 我们先考虑一下暴力做法 先将操作离线下来,之后对于所有的询问串建立$AC$自动机,之后我们把$n$个给出串放到$AC$ 阅读全文
posted @ 2019-01-02 12:21 asuldb 阅读(158) 评论(0) 推荐(0) 编辑
摘要: $AC$机上的计数$dp$啊 并没有想到反着求出不合法的串的个数,直接正面硬上 设$dp[i][j][0/1]$表示匹配出的长度为$i$,在$AC$机上位置为$j$,没有/有匹配到一个完整串的方案数 由于这个的长度是满足子结构的,可以直接$dp$求解 注意结束标记会影响到所有能通过跳$fail$到达 阅读全文
posted @ 2019-01-02 12:20 asuldb 阅读(111) 评论(0) 推荐(0) 编辑
摘要: 从原来的单串匹配变成了多串匹配 好像也没什么特别不一样的地方 原来的做法是搞一个栈,之后一旦匹配到就往前弹栈 做法也一样 但是在$AC$自动机上暴力跳$fail$是要$T$的 我们并没有必要去暴力跳$fail$,只需要存下往后跳$fail$能跳到的成功的位置是哪里就好了 这个在预处理的时候处理一下就 阅读全文
posted @ 2019-01-02 12:19 asuldb 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 调自闭了 记得那是$Day1$的晚上,我和最强的yem在看pj的题 就发现了这道 之后随手推了一个斜率优化,被杨神嘲讽了 结果发现斜率优化确实是最好的做法了 我们根据时间轴来$dp$ 可以把题意转化为数轴上有很多个点,现在将数轴划分成若干个区间,最小化每一个点到其所在区间右端点的距离 之后就可以搞出 阅读全文
posted @ 2019-01-02 12:19 asuldb 阅读(158) 评论(2) 推荐(0) 编辑
摘要: 卡特兰数! 至于为什么是卡特兰数,就稍微说那么一两句吧 对于一个高度为$i$的阶梯,我们可以在左上角填一个高度为$k$的阶梯,右下角填一个高度为$i 1 k$的阶梯剩下的我们用一个大的长方形填上就可以啦 比如这个样子 之后还需要高精,但是为了简单好写,这里可以分解质因数,之后就变成另一个单精度乘高精 阅读全文
posted @ 2019-01-02 12:18 asuldb 阅读(248) 评论(0) 推荐(1) 编辑
摘要: $n=m$时候经典的卡特兰 那$n!=m$呢,还是按照卡特兰的方式来推 首先总情况数就是$\binom{n+m}{n}$,在$n+m$个里选择$n$个$1$ 显然有不合法的情况,减掉它们 对于一种不合法的情况,必然存在一个前缀$0$的个数比$1$多$1$ 我们考虑构造出一个由$n+1$个$1$和$m 阅读全文
posted @ 2019-01-02 12:18 asuldb 阅读(94) 评论(0) 推荐(0) 编辑
摘要: 第一问的做法好像不太一样 首先第二问非常简单,直接在主席树上二分就好了,单次查询的复杂度$O(logn)$ 第一问并没有想到有二分这种神仙操作,依旧用的是主席树 我们可以对矩阵建出主席树,也就是像二维前缀和那样的主席树 但是众所周知我们写二维前缀和的时候是这么写的 我们发现这个样子我们根本没有办法优 阅读全文
posted @ 2019-01-02 12:18 asuldb 阅读(148) 评论(0) 推荐(0) 编辑
摘要: "题目" 非常妙的题目,一看到就以为是一道博弈,之后就不会做了 正解非常巧妙,由于我们只需要求出最后两个人得分的差值,所以对于每一条边我们将其的权值拆成两边,分给其连接的两个点 如果这两个点被同一个人选择,那么这条边的边权就会加到最后这个人的总得分里去,如果被两个人分别选择,那么两个人每个人都获得了 阅读全文
posted @ 2019-01-02 12:17 asuldb 阅读(141) 评论(0) 推荐(0) 编辑
摘要: noip前练一下码力还是非常有前途的 这道题本来就是想写个大暴力弃疗的,所以直接强上暴力浑身舒爽 结果发现要不是判重的时候脑残了,就能$A$了 没什么好说的呀,就是每一次都暴力$O(n)$往上下左右扩展状态,之后放到队列里,$map$判重就好了 代码 cpp include include incl 阅读全文
posted @ 2019-01-02 12:17 asuldb 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 没写过几道的前缀和优化$dp$ 第一问是小学生难度的二分 第二问就直接$dp$了 设$dp[i][j]$表示当前分割点在$i$之后,前面一共分割了$j$段的方案数 利用前缀和单调性,通过二分预处理出每一个点往前能扩展到的最大位置,之后前缀和优化就可以啦 但是发现这个样子空间会炸,而这个样子还没有办法 阅读全文
posted @ 2019-01-02 12:16 asuldb 阅读(135) 评论(0) 推荐(0) 编辑