01 2019 档案
摘要:"题目" 看着有点可怕 求 $$\sum_{i=1}^{n!}[(i,m!)=1]$$ 考虑一下$m=n$的时候的答案 非常显然就是$\varphi(m!)$ 而如果$n m$ 非常显然$m!|n!$ 可以把$n!$想象成一个大数轴,将这个大数轴分成$\frac{n!}{m!}$部分,每一部分都有$
阅读全文
摘要:今天考了毕姥爷的一套题,差点保龄 "题目" 挺良心的一套题,至少我不用再搬一遍题面了 T1.B君的第一题 我为什么当时去写了一个树形$dp$还妄图$A$掉啊 这题保龄感觉舒爽 首先如果我们要求的是点联通块的期望个数的话,那就非常好求了,一个点周围的边就算全删掉,这个点也是一个联通块,又因为这是一个树
阅读全文
摘要:"题目" 没有看懂题目呢说的是什么,但是我们要求的是这个式子 $$Ans=\sum_{i=1}^n\sum_{j=1}^n\varphi(gcd^2(i,j))$$ 看起来挺鬼畜的是吧 老方法枚举$gcd$ $$Ans=\sum_{i=1}^n\varphi(i^2)f(\left \lfloor
阅读全文
摘要:据说这道题卡空间? 不存在的,拿$AC$自动机去存$5000\times5000$的串肯定是要M的 我们可以考虑对长度为$n$的串建一个$SAM$,这样空间就只需要两倍的$3e5$了 之后把每个输入的串放到$SAM$上匹配,匹配到了就打更新一下这个节点的最大匹配长度 之后在$parent$树上传一下
阅读全文
摘要:"题目" 抄$yyb$代码真是开心的一批 这道题看上去确实是没有什么思路 之后想一想大概是在$parent$树上从儿子向父亲转移 但是好像不太对的样子 于是考虑在$parent$树上从父亲向儿子转移 显然父亲一定是儿子的一个后缀,于是父亲肯定在儿子里出现了一次 至于如何保证其出现第二次呢,我们可以用
阅读全文
摘要:考试的时候由于没有想出这道题就弃疗了 发现主要还是自己姿势不够 【问题描述】 $P$ 校某宿舍人才辈出,其舍长图书馆男神因被偷拍侧身照而在网络上一票走红。 小鲜肉 $SJY$ 是小 $Cat\ Rainbow$ 的好朋友,他也是该宿舍的一员。作为一名著 名的程序设计师,小鲜肉 $SJY$ 不但注重萌
阅读全文
摘要:"题目" 并不知到为什么这道题讲了这么久 我们发现这道题就是最小割的板子啊,完全可以套上文理分科的板子 把每个机器和$T$连边,容量为$p_i$,这些$p_i$并不计入总贡献 对于每一个要求我们设置一个新虚点$x$,$S$向$x$连边,容量为$C_i$,$x$分别向$A_i$和$B_i$连边容量为$
阅读全文
摘要:"题目" $CTSC$也有这么水的题啊 首先看到美味值来自于最小的美味值,我们就可以先考虑把所有的果汁按照美味值排序 接下来可以考虑二分,二分出一个$mid$我们只使用美味值大于等于$mid$的果汁能否满足要求 我们求一下要满足$L_i$的要求最小花费是多少就可以啦 根据一个非常显然的贪心,我们尽量
阅读全文
摘要:"题目" 好像是$SDOI2017$某题的数据范围弱化版 不过把这道题放到$SDOI2017$某题应该有$60$可以拿吧 看到多串首先建$AC$自动机 之后就可以视为把这个随机生成的字符串放到$AC$机上匹配,由于是随机生成,那么本质上就是在$AC$机上随机游走,走到有结束标记的点就停下来 设$dp
阅读全文
摘要:"题目" 这道题真是非常巧妙了 首先分析一下对于一个楼房$i$它要是想能被看见需要满足什么条件 显然对于任意的$jh_j$$ 也就是 $$\frac{h_i}{i} \frac{h_j}{j}$$ 也就是一个从$1$开始的最长上升子序列 那么还有单点修改,这是一个动态$dp$? 当然不是了,这里需要
阅读全文
摘要:被拉到郑州培训了 考了一上午莫名自闭 帮助慎老师拿到$rk1$非常开心 简述一下题目吧 T1.まんふは函数 原题地址 考原题还行 据说是$Huffman$树 在成爷爷的再三讲解下,我终于明白了 我们可以把$f(i,j)$理解为合并了$n-i+1$个点,形成了$j$棵树这个状态到最终状态也就是$n$个
阅读全文
摘要:"题目" 好像$noip$之前做某雅礼的题的时候看到过这道题的数据范围增强版 当时那道题数据范围是$3e5$感觉神仙的一批 这道题数据范围$5e3$那岂不是可以$O(n^2)$水过 有一点非常显然就是我们断开的那条边肯定是树的直径上的一条边,于是我们可以先来两遍树形$dp$求出子树内最长链,次长链,
阅读全文
摘要:题目简洁明了 给定$x,n$,多组询问,求 $$\sum_{i=1}^n\sum_{j=1}^n gcd(x^i 1,x^j 1)$$ 对$1e9+7$取模,$x,n
阅读全文
摘要:"题目" 首先$SAM$上两个节点的$lca$表示的子串就是这两个节点表示的前缀的最长公共后缀 而我们想求后缀的$lcp$只需要把$SAM$反过来建就好了 而这道题一次要求很多后缀的$lcp$显然可以考虑一个树形$dp$,就是考虑每个节点作为$lca$的贡献 这个非常简单,一边$dfs$一边求子树和
阅读全文
摘要:"题目" 只能做网络流度日了 当然是要对每个修车的人拆点,把每个人拆成$n$个点用于接收不同时刻的车 每个车$i$向每个时刻$k$的人$j$连边,边权为$t[i][j] k$这样就是这样修的等待时间了 代码 cpp include include include include include de
阅读全文
摘要:"题目" 听说正解是三分 但是这不是普及级别的模拟吗,我觉得这道题其实放到普及$T2$好像也非常自然 发现$t$最大也就只有$1e5$,我们可以直接枚举最晚的完成时间 之后我们就可以算一下那些要求在这一天之前就发成绩学生们产生的不愉快值 之后对于那些本来应该在这之前完成的工作我们算一下这些一共能有多
阅读全文
摘要:"题目" 发现数据范围非常小就可以猜想这是一个网络流 又发现权值有正有负,就可以猜想这是一个最大权闭合子图 选择一个区间$[i,j]$就必须要选择其所有子区间,这也非常符合最大权闭合子图的模型 但是我们枚举$[i,j]$像所有子区间连边显然并不是非常可取,因为这样会建出$O(n^4)$级别的边来 所
阅读全文
摘要:"题目" 还是$SAM$亲切 题意看起来挺不好懂得,其实就是问你截止到完全匹配之前,$S$串的每个位置和$T$串的$lcp+1$之和 既然是需要完全匹配的,所以我们肯定需要先找到这个$T$串在$S$串中第一次出现的位置在哪里 最开始觉得可以直接建广义$SAM$之后直接树上倍增找到$T$串,但是空间就
阅读全文
摘要:"题目" 啥都不会只能来写写题解了 第一问先搞一个$dp$吧,小学生水平的$dp$ 第二问要求每一个点只能使用一次,显然要先拆点,把$i$拆成$i$与$i'$,之后$i$于$i'$连容量为$1$的边 之后能产生长度为$ans$的LIS需要满足什么条件呢,显然得从一个$dp[i]=1$的点开始,从一个
阅读全文
摘要:发现这个图还挺不好连得 因为并不是非常经典的最大权闭合子图了 试图拆点也发现没有什么效果 但是转念一想发现最大权闭合子图之所以能跑最小割就是因为我们强行分组了 这里是不是也可以强行分组啊 于是我们可以强行分组,把所有点分成黑点和白点,黑点向$T$连边,$S$向白点连边,边权是这个点的权值 之后白点向
阅读全文
摘要:"题目" 每天一道$SAM$真是非常开心 一看就是广义$SAM$+线段树合并了 我们存好$S$串每一个前缀的终点,之后在$parent$树上倍增找到表示$S[l,r]$这个子串的节点,我们用线段树合并维护好$endpos$集合,查一个区间最大值就好了 代码
阅读全文
摘要:"题目" 我太$zz$了 有一个非常显然的问题就是一个植物显然能保护同一行上比它更靠后的植物,因为显然得先干掉更靠前的植物 首先可以看出来这是一个经典的最大权闭合子图的模型,于是去套最小割 发现植物的收益有正有负,于是想到正的和源点连边,负的和汇点连边 我们再来考虑一个植物没有被割掉的的状态 显然是
阅读全文
摘要:板子 题意就是每个点只能经过一次 所以非常显然拆点,除去$1,n$每个点$i$向$i'$连一条容量为$1$费用为$0$的边 剩下的边按照输入给出的建就好了 代码 cpp include include include include include define maxn 405 define re
阅读全文
摘要:"题目" 可能是一个乱搞做法,同时也跪求有人能帮我分析一下复杂度 还是先来看比较简单的$68pts$,也就是$l=1,r=|S|$的情况 我们可以直接把$S$串和所有的$T$串一起建一个广义$SAM$,用一个$vector$维护每个$T$加入$SAM$时新产生的节点 我们只需要求出来这些新增节点没有
阅读全文
摘要:"题目" 第一问直接板子敲上去 第二问并不明白直接在残量网络上加边的神仙做法 非常显然我们需要让流量加$k$,那么我们就使得网络里的总流量为$maxf+k$,$maxf$是第一问求出来的最大流 所以搞一个超级源点,向$1$连一条流量是$maxf+k$费用是$0$的边,之后在原来的图的基础上再给每条边
阅读全文
摘要:"题目" 线段树合并的板子题目了,写一写对线段树合并的理解 首先线段树合并就是把一大堆权值线段树合并起来的算法 尽管复杂度看起来并不是非常科学,但是确是非常优秀的$O(nlogn)$ 主要的写法两种 把$b$合并到$a$上 但是我们这样直接把$b$合并过来的话,在以后继续合并$a$的时候可能合并过程
阅读全文
摘要:"题目" 不会线段树合并怎么办 那就硬上主席树啊,树上主席树也可以用来维护$endpos$集合 首先先来考虑一下$l=1,r=|S|$的情况怎么做 这是一个非常显然的贪心,我们只需要在$SAM$上匹配这个字符串,一旦无法匹配下去或者已经匹配完成了,我们就强行找一条在这个位置上字典序大一些的一条转移就
阅读全文
摘要:"题目" 又是我不会做的题了 看看柿子吧 $$\sum(a_i+c b_i)^2$$ 最小化这个柿子 之所以不写下标是因为我们这个$\{a\},\{b\}$可以循环同构 那就开始化吧 $$\sum(a_i+c b_i)^2$$ $$=\sum(a_i+c)^2+\sum b_i^2 \sum2(a_
阅读全文
摘要:"题目" 好神仙啊 $$F_{j}=\sum_{i include include include include define maxn 500005 define re register define LL long long define max(a,b) ((a) (b)?(a):(b))
阅读全文
摘要:你看我都不好意思说是学习笔记了,毕竟$FFT$我怎么可能学得会 那就写一篇抄袭笔记吧~~ctrl+c真舒服~~ 先从多项式说起吧 1.多项式 我们定义一个多项式 $$F(x)=\sum_{i=0}^{n 1}a_ix^i$$ 这就是一个$n 1$次的多项式了 比如说$F(x)=x^3+2x^2+x+
阅读全文
摘要:"题目" 第$k$大显然没有什么办法直接求,于是多一个$log$来二分一波 现在的问题变成了判断一个$mid$是否能成为第$k$大 这还是一个非常经典的棋盘模型,于是经典的做法就是转化成二分图之后行列之间匹配 如果$a_{i,j} include include include include de
阅读全文
摘要:"题目" 好题啊 我们要求的是 $$C=\frac{\sum_{i=1}^na_i}{\sum_{i=1}^nb_i}$$ 使得$C$最大 显然 $$C\times \sum_{i=1}^nb_i=\sum_{i=1}^na_i$$ 这个问题自然不好解决,我们尝试将其转化为一个判定性问题 对于我们二
阅读全文
摘要:"题目" 这里是一种建广义$SAM$的新姿势,就是每次都把$last$置成$1$ 看起来也没什么科学的地方,但是这就是建广义$SAM$的方法 之后我们对于那些新插入的位置我们给它涂上颜色 显然对于一个出现次数超过$k$次的子串,其子树内部必然有超过$k$种颜色 我们来一遍$hh$的项链就可以统计出来
阅读全文
摘要:"题目" 听说这是广义$SAM$的板子 看来对于广义$SAM$我也就只会板子了 叶子数很少,所以可以枚举每一个叶子节点作为根建一遍$Trie$树 只需要对$Trie$树建出$SAM$就好了 跟对单串建$SAM$不同的就是$last$节点是这个点在$Trie$树上的父亲 并不是很清楚为什么需要在$so
阅读全文
摘要:[题目][https://www.lydsy.com/JudgeOnline/problem.php?id=4892] 好像用$SAM$做的都是$dfs$啊 ~~其实这里也是搜索~~ 如果用$SAM$来做非常好理解,就是从$SAM$上匹配这个字符串,允许有不超过三条转移边不一样 于是$dfs$做法非
阅读全文
摘要:"题目" 为什么没人用$SAM$啊 我们先把原来的模式串建一遍$SAM$,之后我们就可以求出$SAM$上每一个节点的$|endpos|$就可以知道每一个子串出现的次数了,也就是在模式串上的匹配数了 之后我们设$dp[i][j]$表示前$i$个里组合出的子串在$SAM$上匹配到了$j$位置的方案数是多
阅读全文
摘要:写板子了,可持久化$Trie$的板子了 其实和主席树写法类似,还是存好左右儿子之后存好权值 之后差分去查询就好了 这道题第一问我们直接$dfs$序转化成区间 第二问搞成$x,y,lca(x,y),fa[lca]$之后一起差分就好了 代码
阅读全文
摘要:"题目" 不会广义$SAM$啊 但信仰插入特殊字符就可以搞定一切了 我们先把所有的串搞在一起建出一个$SAM$,记得在中间插入特殊字符 对于$parent$树上的一个节点,只有当其$endpos$集合中的所有元素都来自于同一个串的时候我们才对它进行统计 所以我们需要维护一个$parent$树上子树最
阅读全文
摘要:"题目" $SAM$+线段树 我竟然还会写线段树真是感人至深 考虑到我们只能计算出现一次的子串,所以我们直接先求一个子树和,只对$|endpos|=1$的点操作就好了 我们在$SAM$插入的时候可以先存存好每一个前缀的结尾位置在哪里,之后我们对于每一个前缀讨论其出现次数为$1$的后缀 显然在$par
阅读全文
摘要:$SAM$板子,直接建出$SAM$之后把每个串放上去匹配就好了 代码 cpp include include include include define maxn 10000005 define re register define LL long long define max(a,b) ((a
阅读全文
摘要:"题目" 对于$k\in[1,n]$求出长度为$k$的子串出现次数最多的出现了多少次 我直到现在才理解后缀自动机上的子树和是什么意思 非常显然的一点是 $$endpos(link(u))⊇endpos(u)$$ 考虑到$link(u)$有多个儿子 于是还需要$endpos$的另外一个性质 $$end
阅读全文
摘要:"题目" 在$DAG$上跑一个$dp$就好了 设$ans_i$表示到了$SAM$的$i$位置上所有的子串形成的数的和,之后我们顺便记录一个方案数$d_i$ 之后我们直接转移就好了 $$ans_v+=ans_u\times 10+w[u,v]\times d_u$$ $$d_v+=d_u$$ 答案是$
阅读全文
摘要:"题目" 好题啊 $SAM$+单调队列优化$dp$ 首先这个$L$满足单调性真是非常显然我们可以直接二分 二分之后套一个$dp$就好了 设$dp[i]$表示到达$i$位置熟悉的文章的最大长度 有一个非常显然的$dp$方程 $$dp_i=max\{dp_j+i j\}\ (i j =mid)$$ 同时
阅读全文
摘要:"题目" 来画柿子吧 我们要求的是 $$f(x)\equiv t(mod\ \ p)$$ 其中$f(1)=x_0,f(x)=af(x 1)+b$ 我们来写几项柿子看看 $$f(1)=x_0$$ $$f(2)=ax_0+b$$ $$f(3)=a(ax_0+b)+b=a^2x_0+ab+b$$ $$f(
阅读全文
摘要:"题目" 用一道板子题来复习一下$bsgs$ $bsgs$用于求解形如 $$a^x\equiv b(mod\ p)$$ 这样的高次不定方程 由于费马小定理的存在,我们可是直接暴力扫一遍$p$,由于$p 1$次之后肯定会有循环节出现,所以$O(p)$时间内就可以出解 $bsgs$本质上就是一种分块了
阅读全文
摘要:$SAM$上匹配 我们就是需要找到两个串的最长公共子串 先对其中一个串建出$SAM$,之后我们把另一个串放到上面跑 如果当前在$SAM$的状态是$now$,下一个字符是$c$,匹配出的的长度为$L$ 如果$now$有$c$这个转移,我们就转移过去,$L$++ 如果没有我们就跳$link$,知道跳到有
阅读全文
摘要:好题啊 $SA+ST\text{表}+\text{莫队}$ 我们先强行把所有的串连起来,串与串之间插入特殊字符,姓和名之间也插入特殊字符 之后跑一遍$SA$,求出$sa$和$het$ 对于所有的询问串,我们标记好他们的开头,之后我们对于排好序的后缀建一个$st$表,找到每个询问串往左往右最多可以扩展
阅读全文
摘要:拆点 把每个点拆成入口和出口两个点 以下几种连边方式就行了 1. 对于有蜥蜴的点,$S$向入口连1的边 1. 对于能出去的点,出口向汇点连容量为$inf$的边 1. 每个点的入口和出口连容量为高度的边 1. 之后能相互到达的点,出口向入口连容量为$inf$的边 代码
阅读全文
摘要:据说是网络流棋盘模型了 我们把每一个连续子段都看成一个点,我们先把所有的行上的连续子段找出来给他们编上号,所有列上的连续子段找出来也编上号 现在每个格子都有两个编号了,$a[i][j]$表示行所对应的连续子段的编号,$b[i][j]$表示列所对应的连续子段的编号 之后我们就需要把这些子段匹配起来就可
阅读全文
摘要:好题啊 先考虑一些如何判掉无解的情况 我们开一个桶,存一下每个编号有多少个人必须选,之后做一个后缀和,之后我们扫一遍,如果一旦有一个后缀和$pre[i]$超过$n i+1$就不合法了,因为我们在$[i,n]$这里要安排的人已经超过$n i+1$也就是这个区间的容纳范围了,所以这样放下去肯定会导致超掉
阅读全文
摘要:发现这个数列的范围特别大但是值域的范围特别小 于是可以大胆猜测这道题值域肯定需要开到状态里去 又发现$262144=2^{18}$这个暗示非常明显啊,暗示这道题跟二进制有关系 其实也没什么关系 设$dp[i][j]$表示从$i$位置开始合并,合并出$j$这个数所合并的区间的尾位置在哪里 之后就会发现
阅读全文
摘要:听说这是动态开点主席树的板子题,但是发现我还不会,于是就来写一写 其实跟主席树一个样子的 这里就是存个板子吧 cpp include include include include define re register define max(a,b) ((a) (b)?(a):(b)) define
阅读全文
摘要:非常玄妙的博弈入门 好神仙的题啊 其实这就是经典的$Nim$问题 如果所有石子的异或和为$0$,那么这就是一个必败状态 这个我只会感性理解一下 首先所有的石子都是$0$,异或和肯定是$0$,这也自然是一个必败状态 而如果异或和不是$0$,我们设异或和为$X$ 我们可以找到这个$X$的最高位,显然那些
阅读全文
摘要:求$\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
阅读全文
摘要:这是$sa$的经典题目了 我们都知道答案就是 $$\sum_{i=1}^nn+1 sa[i] het[i]$$ 我们尝试理解一下这个东西 首先$n+1 sa[i]$表示的是排名为$i$的这个后缀能形成的子串个数是多少个,也就是从$sa[i]$位置开始的子串 之后减掉$het[i]$表示减掉的是和排名
阅读全文
摘要:$Ac$自动机好题了 这个题要求我们一直无法匹配到结束标记,所以我们直接在$trie$图上找到一个环,这个环可以被根节点到达,之后还没有结束标记 发现自己不会$dfs$找环,于是直接莽上$tarjan$ 之后一直写挂各种$sb$ 代码 cpp include include include incl
阅读全文
摘要:怎么全是广义后缀自动机,我$AC$自动机不服 这道题可以使用的算法很多,$SA$或者$SAM$应该都可以 但是我都不会 但是这毕竟是一个多串匹配问题,$AC$自动机还是可以刚一刚的 我们先考虑一下暴力做法 先将操作离线下来,之后对于所有的询问串建立$AC$自动机,之后我们把$n$个给出串放到$AC$
阅读全文
摘要:其实这道题跟 "[AHOI2013]差异" 很像 其实这个问题的本质就是让你算所有后缀的$lcp$长度之和,但是得来自两个不同的字符串 先把两个字符串拼起来做一遍$SA$,由于我们多算了来自于同一个串内的情况 于是在分别对这两个串建$SA$,减掉这两次算出来的答案 现在的问题转化为求出$height
阅读全文
摘要:好像是最小表示法的板子题呢 但是不会啊,于是就变成了我的第一道$SAM$ 对于这种跟循环同构有关系的题,显然需要将原来的串倍长,之后先插入到$SAM$里去 之后我们在$SAM$上找到贪心访问最小的儿子找到一条长度为$n$的路径就好了 显然因为我们循环同构了,所以从根到根的任何一个转移必然会存在一个长
阅读全文
摘要:$AC$机上的计数$dp$啊 并没有想到反着求出不合法的串的个数,直接正面硬上 设$dp[i][j][0/1]$表示匹配出的长度为$i$,在$AC$机上位置为$j$,没有/有匹配到一个完整串的方案数 由于这个的长度是满足子结构的,可以直接$dp$求解 注意结束标记会影响到所有能通过跳$fail$到达
阅读全文
摘要:从原来的单串匹配变成了多串匹配 好像也没什么特别不一样的地方 原来的做法是搞一个栈,之后一旦匹配到就往前弹栈 做法也一样 但是在$AC$自动机上暴力跳$fail$是要$T$的 我们并没有必要去暴力跳$fail$,只需要存下往后跳$fail$能跳到的成功的位置是哪里就好了 这个在预处理的时候处理一下就
阅读全文
摘要:调自闭了 记得那是$Day1$的晚上,我和最强的yem在看pj的题 就发现了这道 之后随手推了一个斜率优化,被杨神嘲讽了 结果发现斜率优化确实是最好的做法了 我们根据时间轴来$dp$ 可以把题意转化为数轴上有很多个点,现在将数轴划分成若干个区间,最小化每一个点到其所在区间右端点的距离 之后就可以搞出
阅读全文
摘要:卡特兰数! 至于为什么是卡特兰数,就稍微说那么一两句吧 对于一个高度为$i$的阶梯,我们可以在左上角填一个高度为$k$的阶梯,右下角填一个高度为$i 1 k$的阶梯剩下的我们用一个大的长方形填上就可以啦 比如这个样子 之后还需要高精,但是为了简单好写,这里可以分解质因数,之后就变成另一个单精度乘高精
阅读全文
摘要:$n=m$时候经典的卡特兰 那$n!=m$呢,还是按照卡特兰的方式来推 首先总情况数就是$\binom{n+m}{n}$,在$n+m$个里选择$n$个$1$ 显然有不合法的情况,减掉它们 对于一种不合法的情况,必然存在一个前缀$0$的个数比$1$多$1$ 我们考虑构造出一个由$n+1$个$1$和$m
阅读全文
摘要:第一问的做法好像不太一样 首先第二问非常简单,直接在主席树上二分就好了,单次查询的复杂度$O(logn)$ 第一问并没有想到有二分这种神仙操作,依旧用的是主席树 我们可以对矩阵建出主席树,也就是像二维前缀和那样的主席树 但是众所周知我们写二维前缀和的时候是这么写的 我们发现这个样子我们根本没有办法优
阅读全文
摘要:"题目" 非常妙的题目,一看到就以为是一道博弈,之后就不会做了 正解非常巧妙,由于我们只需要求出最后两个人得分的差值,所以对于每一条边我们将其的权值拆成两边,分给其连接的两个点 如果这两个点被同一个人选择,那么这条边的边权就会加到最后这个人的总得分里去,如果被两个人分别选择,那么两个人每个人都获得了
阅读全文
摘要:noip前练一下码力还是非常有前途的 这道题本来就是想写个大暴力弃疗的,所以直接强上暴力浑身舒爽 结果发现要不是判重的时候脑残了,就能$A$了 没什么好说的呀,就是每一次都暴力$O(n)$往上下左右扩展状态,之后放到队列里,$map$判重就好了 代码 cpp include include incl
阅读全文
摘要:没写过几道的前缀和优化$dp$ 第一问是小学生难度的二分 第二问就直接$dp$了 设$dp[i][j]$表示当前分割点在$i$之后,前面一共分割了$j$段的方案数 利用前缀和单调性,通过二分预处理出每一个点往前能扩展到的最大位置,之后前缀和优化就可以啦 但是发现这个样子空间会炸,而这个样子还没有办法
阅读全文
摘要:发现我自己好像不太会做这种题目 但是还是发现有一些套路的 就是拿出中间相邻的两项来进行比较 我们拿出$i,j$这相邻的两项,设$x$表示所有排在$i$还有$j$之前的人左手上的数的乘积,那么$i$在前的充分条件是 $$\frac{x a_i}{b_j}
阅读全文
摘要:就是化柿子 我们求 $$\frac{1}{x}+\frac{1}{y}=\frac{1}{n!}$$ 的正整数解的个数 喜闻乐见的化柿子了 $$\frac{x+y}{xy}=\frac{1}{n!}$$ $$xy=xn!+yn!$$ $$xy xn!=yn!$$ $$x=\frac{yn!}{y n
阅读全文
摘要:这道题真是非常蛇皮,卡自然溢出,还非常丧病的卡双自然溢出 一句话题意,求出最长的前缀后缀满足$AB.........BA$的形式 也就是说外面一个$next$,里面一个$next$ 本来想$kmp$的,但是发现没有办法做 于是就考虑一下递推 我们可以定住$A$的长度,来求出$B$的长度 设$dp[i
阅读全文
摘要:$HH$的项链加强版,数据范围和题意都加强了 题意大概:给出n个数,求区间出现次数 =2的数的个数。 一眼莫队,可是我还不会莫队啊 那就树状数组吧 回忆一下$HH$的项链,套路差不多,那道题我们维护的是每一种颜色最后出现的位置,因为根据其最后出现的位置我们就可以判断其是否在区间里 而判断这道题也很简
阅读全文
摘要:这好像是个暴力? 但是跑的挺快的 我们设$dp[i][j][k]$表示在第$i$行我们最远染到的位置是$j$,这一行上一共染了$k$次最多能染对多少个格子 理性分析一下啊,每一行最多也就染$m$次,这样就能把这一行格子全部都染对 所以这个空间复杂度是$nm^2$的 之后考虑一下转移 显然这就是一个非
阅读全文
摘要:这道题好暴力啊 发现自己刚学$OI$的时候对着这道题写了一个大搜索 发现已经看不懂了 果然我现在菜到连一年半前的我都不如了 这其实是一个基环树$dp$啦,基环树上的最大点独立集 其实很简单,我们都知道树上的最大点独立集是可以$O(n)$做出来的,而基环树和树之间唯一的一个差距就是基环树多了一条边,于
阅读全文
摘要:我又对着跑出正解的程序调了好久 怕不是眼瞎了 这就是个分段矩阵,我们很容易就得到了递推式 $$f[i]=f[i 1] 10^k+i$ 其中$k=log_{10}i$ 于是就是分段矩阵 之后就是代码了,没有加快速乘WA了好久
阅读全文
摘要:是个好东西,可以处理在模数不互质的同余方程组 核心就是用扩欧来合并方程 如果我们有两个形如$x\equiv b_1(mod\ a_1)$ $x\equiv b_2(mod\ a_2)$的方程我们要将他们合并 就是利用各种操作化柿子 $$x=a_1k_1+b_1=a_2k_2+b_2$$ 随便移一下
阅读全文
摘要:一眼题,答案就是$C_m^m d_{n m}$ 就是从$n$个中选取$m$个在位,剩下的错排,之后就是乘法原理了 但是我发现我的错排公式竟然一直不会推 这个递推式很简单,就是$d[1]=0,d[2]=1,d[n]=(n 1) (d[n 2]+d[n 1)$ 其实是这样推出来的 我们从$n$个元素错排
阅读全文
摘要:我们看到了及其可怕的数据范围 这个样子都没有办法直接读入的数据范围应该怎么算 我们观察一下递推式$f[i][j]=a f[i][j]+b(j!=1)$ $f[i][1]=c f[i 1][m]+d$ 转移非常简单,于是可以考虑一下矩阵乘法 如果我们将这个矩阵破坏成一个链,那么就会有这种形式的递推 连
阅读全文
摘要:```cpp //第一次A掉紫题就来写题解,我是不是疯了 //说实话这道题还是比较裸的树上差分 //对于树上的一条路径(s,t),我们只需要把ch[s]++,ch[t]++,ch[LCA(S,T)] ,再把lca的爸爸减一 //再dfs跑一遍就可以了 //但这题还是有些不一样的,这道题里的路径终点会
阅读全文
摘要:这本质上是一个$dp$ 如果没有"两个上升子序列相同,那么只需要计算一次"这一个性质,那么就很好做了,我们用$dp[i]$表示以$i$结尾的上升子序列个数,那么就有$dp[i]=\sum_{j=1}^{i 1}dp[j]$ 这个暴力转移是$O(n^2)$的,我们这里可以直接用树状数组来优化,于是就变
阅读全文
摘要:我是发了疯才来写这道题的 我如果用写这道题的时间去写dp,我估计我能写上三四道 可怕的数据结构题 "题目" 这道题的鬼畜之处在于实在是不太好写 我们看到要求离树根尽量的近,所以我们很容易就能想到树上倍增,所以我们需要有一种能快速求出一条路径能被多少条给出路径完全覆盖 我们知道起点是固定的,要求完全覆
阅读全文
摘要:首先我们能够一眼看到4 include include define re register define int long long define maxn 17 using namespace std; int k; int n,a[maxn],f[maxn][1'9') c=getchar()
阅读全文
摘要:同样是从试炼场点进来的,这是一道非常需要耐心的题 不过明明就是我太菜了,真正的大佬都是一眼秒吧 首先我们有一种比较常规的暴力思路,就是用线段树来维护区间连续子段数,而拒绝掉所有与当前区间相冲突的预约我们可以通过二分来做,来查找从最开始到这个区间的区间首第一个与区间首相同的位置,和区间尾到最后最靠后的
阅读全文
摘要:其实我是点单调队列的标签进来的,之后看着题就懵逼了 于是就去题解里一翻,发现楼上楼下的题解说的都好有道理, f[j]表示一个再使用一个硬币就能到达i的某个之前状态,b[now]表示使用那个能使状态j变到i的硬币的面值,find表示这些花费可以到达的最大距离,由于前缀和保持单调可以用二分求解,方程不就
阅读全文
摘要:这是一道神奇的题目,我调了大概一天多吧 首先hack一下翻译,操作3并没有要求查询后从其所在集合里删除该元素 于是我们来看一下这三个操作 第一个合并属于并查集的常规操作 第三个操作加权并查集也是可以解决的 至于第二个操作就是这个题的难点了 对于操作二的要求“ 将 $p$ 移动至包含 $q$ 的集合中
阅读全文
摘要:我记得我调这道题时中耳炎,发烧,于是在学长的指导下过了也没有发题解 发现我自己的思路蛮鬼畜的 常规操作:$f[i][j]$ 表示到$i$的距离为$j$的奶牛有多少只,但注意这只是在第二遍dfs之后 在我的第一遍dfs中(就是下面那个叫build的函数),$f[i][j]$的含义是在i这课子树中到$i
阅读全文
摘要:这大概是我写过的除了树剖以外最长的代码了吧 首先看到有向图和重复经过等敏感词应该能想到先tarjan后缩点了吧 首先有一个naive的想法,既然我们要求只能走一次返回原点,那我们就正着反着建两遍图,分别处理出1到其他点的所能经过的最多点数和其他点到1经过的最大点数,之后找到那些和1有正边或反边相连的
阅读全文
摘要:比较基础的线段树了 我们要维护最大连续子串,这个可以说是一个比较套路的操作了 我们在 "[SHOI2009]会场预约" 这道题中已经比较深刻的认识到了这个套路了 对于这道题,我们显然要知道一个区间内最大的全为1(我的代码里用1表示空房)子串长度是多少,那怎么办呢 我们多开几个数组 $d[i]$表示$
阅读全文
摘要:发现自己学了几天splay已经傻了 其实还是一个比较裸的dp的,但是还是想了一小会,还sb的wa了几次 首先这道题的状态应该很好看出,我们用$f[i][j]$表示在前$i$个数中(即$1 i$中)逆序对个数为$j$的方案数 于是我们考虑怎么转移,我们知道逆序对这个东西并不看重实际的大小,只用关心相对
阅读全文
摘要:很妙的一道题,我之前一直是用一个非常暴力的做法 就是枚举点权跑堆优化dijkstra 但是询问次数太多了 于是一直只有50分 今天终于~~抄~~做了这道题,不贴代码了,只说一下对这道题的理解 首先点权和边权不能混在一起,这是公认的,毕竟这个样子完全没有办法处理 那我们为什么要排序呢,发现其余几篇题解
阅读全文
摘要:这是一道非常可怕的题 细节非常之多,就连$INF$设置的太小都会导致离奇错误 根据这道题一堆废话之后,我们首先要处理的是对于每个点,他下面那个要到达的点是谁 也就是距离他最近的点和次近的点分别是谁 看起来好像有些鬼,但是我们想一想这个距离是怎么定义的 “城市 $i$ 和城市 $ j$之间的距离 $d
阅读全文
摘要:可能我只适合这道题的50分 但还是要争取一下的 我们知道对于$gcd$和$lcm$有这样的定义 $a=\prod _{i=1}^{\pi(a)}p_i^{d_{i}}$ $b=\prod _{i=1}^{\pi(b)}p_i^{g_{i}}$ 那么则有 $gcd(a,b)=\prod_{i=1}^{
阅读全文
摘要:加权并查集 由于给出信息的是一些一个区间的和为多少,我们显然并不好处理出每一个点应该为多少,这我们根本做不到 但是我们想一下,如果要求一个区间$[l,r]$的和,那么我们是不是可以利用前缀和$p[r] p[l 1]$得到 所以一组信息$l,r,k$其实可以利用前缀和写成$p[r] p[l 1]=k$
阅读全文
摘要:一直不会做,觉得这是一道神题 于是万般无奈下去~~借鉴~~抄了一下题解 发现这就是一道套路题 我们用$dp[i]$表示前$i$天的最小总花费,于是我们就可以用一个常规的老套路来做了 那就是枚举断点 我们如果可以预处理出一个数组$dis[i][j]$表示在第$i$天到第$j$天的最短路的话,方程是不是
阅读全文
摘要:$SDSC$讲过的题,复习一下 如果用一个小根堆来维护拓扑的话显然是会不行的,因为这样求出来的是 字典序最小的拓扑序,并不一定是1尽可能在前 因为字典序是贪心的,如果前面的一位能小就尽可能的小,并不保证1出现尽量靠前 但是如果建一个反图,求一个反向字典序最大的拓扑序呢 那么就会有大的数尽量靠前的情况
阅读全文
摘要:可怕的题目 直接上代码了 cpp include include include include include define eps (1e 6) define re register define min(a,b) ((a) eps) return 0; return 1; } inline i
阅读全文
摘要:看到楼下有大佬说了网络流做法,来给大佬配个代码 ~~我们~~只有我可能都觉得如果不动态加边的话$dinic$可能跑不了这种需要中途退出的二分图匹配 正当我准备去敲匈牙利的时候突然想到这个题可以二分啊 于是二分好了 如果答案是$ans$的话,$ans 1$肯定也满足条件,所以存在单调性,我们就可以二分
阅读全文
摘要:感谢dzm,尽管接受了$The \text{ }\text{ }king\text{ } \text{ }of\text{ } \text{ }SD$的指点但我还是不会 至少方程还是比较好推的 状态还是很常规的,我们设$f[i][j]$表示在第$i$天持有$j$只股票的最大收益是多少 于是我们有三种
阅读全文
摘要:据说这是分层图最短路的板子题 但其实就是一个$dij$多带了一维状态 我们看到$k$很小所以显然我们可以设计一个这样的状态 $d[v][k]$表示从起点到点$v$免费走了$k$条路的最短路是多少 之后向下转移(即普通$dij$里的松弛)也很简单,就是有两种选泽,一种是这条路免费走,还有就是这条路不免
阅读全文
摘要:$f[i][j][k]$表示$A$这个字符串匹配到$i$位置,$B$匹配到$j$位置用了$k$个子串其中$A[i]$可能被选择的方案数 $dp[i][j][k]$表示$A$这个字符串匹配到$i$位置,$B$匹配到$j$位置用了$k$个子串其中$A[i]$一定被选择的方案数 cpp include i
阅读全文
摘要:一个串不能成为第一的情况有两种 1. 另外一个单词是它的前缀 1. 在分配字母表大小关系的时候出现了矛盾的情况 第一种很好判断,一旦我们在一个单词没有匹配完之前遇到一个结束标志,那么就说明另外一个单词是它的前缀 至于第二种,看到大小关系和是否矛盾我们很容易就联想到了拓扑排序 于是我们匹配的时候,发现
阅读全文
摘要:第一篇题解确实会被讨论区里的数据hack掉,那么就随便水一个不会被hack掉的题解吧 首先我们尝试着发现这道题的一些结论, 你就会发现答案是单调的不降的 这里的答案不降指的是 选择每一个位置$i$作为结尾能形成的最长区间的左端点是单调不降的 ,这个很好证明,将$i 1$这个位置作为结尾形成的最长区间
阅读全文
摘要:树剖维护边双 首先我们看到在整个过程中图是保证连通的,于是我们并不需要LCT来维护连通性 而这些询问询问的是两个点之间关键路径的数量,也就是无论怎么走都必须走的数量,显然这就是两点之间的割边的数量 由于这里还有一些删除操作,树剖并不支持,所以我们先将所有的答案读进来,删掉所有的边 之后我们就$Tar
阅读全文
摘要:$Trie$树+$DP$ 我们只需要做一个存在性dp就好了 对于每一个字符串,我们设$f[i]$表示从$1$到$i$位是否能被完全匹配 首先$f[0]=1$,之后我们对于每一个$f[i]=1$我们都可以往下匹配 具体的匹配方法自然是丢到$Trie$树上去,从$i$这位开始,一旦遇到一个结束标记就将这
阅读全文
摘要:$Trie$ 树+搜索 我用的是$dfs$ 首先对于将所有的RNA片段都建到$Trie$树里去,之后来匹配那个模板串就好了 如果是匹配的位置是字母,那么我们就继续往下匹配 如果是$?$,我们必须要略过$Trie$树上的一位去匹配 如果是$ $,我们可以先考虑直接忽略这一位,也可以直接把这一位当成$?
阅读全文
摘要:思路太妙了 刚开始yy出了一种比较自然的dp方法,就是按照游戏的进行来开始dp,设$dp[i][j]$表示第$i$个人为庄家,还剩下$j$个人的概率为多少,但是很快发现这个样子没法转移,因为没有办法确定下一个庄家是谁 于是只能将第二维压成一个状态$s$ ,$dp[i][s]$表示第$i$个人为庄家存
阅读全文
摘要:很妙的一道题 感觉又加深了对$KMP$还有$next$数组的理解 先来看看这个鬼畜的题意,大致就是给你一个字符串, 对于这个字符串的每一个前缀 ,要去找到这个前缀的一个最长的前缀,使得 前缀成为这个前缀的前缀倍长之后的前缀 很蛇皮的题意,之后可能就会懵逼了,这根$KMP$有什么关系 我们来考虑这样一
阅读全文
摘要:首先我们得贪心一下,让吃饭时间较长的人排在队首 去抄一段贪心的证明吧 现在研究在一个队伍里的人有什么性质 可以发现道题里也有一个不变量,就是对于队伍里的前$i$个人,不管他们排队的顺序如何,$a[i]$的前缀和$s[i]$是不会变的,第$i$个人会在$s[i]+b[i]$时刻吃完,这前$i$个人的吃
阅读全文
摘要:发现自己推得组合数好像不太一样 先把这个复杂的柿子写一遍 $$\sum_{i=2}^{\left \lfloor\frac{n}{k}\right \rfloor}C_{2^k 1}^{i}+\sum_{i=1}^{2^{n\text{ } \text{mod} \text{ }k} 1}C_{2^
阅读全文
摘要:这是一道概率+树形$dp$ 首先我们看到这里每一个的贡献都是1,所以我们要求的 期望就是概率 求得其实就是这个 $$\sum_{i=1}^nP_i$$ $P_i$为节点$i$通电的概率 显然节点$i$通电有三种可能 1. 它自己来电了 1. 它的子树里有一个点来电了传了过来 1. 它的子树外面有一个
阅读全文
摘要:发现自己的离散化姿势一直有问题 今天终于掌握了正确的姿势 ~~虽然这并不能阻挡我noip退役爆零的历史进程~~ 还是先来看看离散化怎么写吧,我以前都是这么写的 这是使用$set+map$的离散化,但是显然巨大的常数是极大的劣势 正确的操作应该是这个样子 cpp std::sort(a+1,a+n+1
阅读全文
摘要:我太sb啦 合并的时候又漏了,又漏了,又漏了 ~~我个sb~~ 这是个板子题,并不知道为什么SHOI2015会考这么板子的题,但是我又sb了,又sb了,又sb了,又没有1A 显然我是凉了 这道题有三个操作 1. 区间清零 1. 将一个区间清零,之后补到另一个区间去,但是有可能补不满 1. 询问一个区
阅读全文
摘要:lx让做的题,其实很简单,难度评到紫令人吃惊 首先读进来$n,m$先$++$,之后就是一个格点数为$n m$的矩阵了 我们直接求很那做,补集转化一下,我们容斥来做 首先所有的情况自然是$C_{n m}^3$了 再算出不合法的情况 之后有$m$列,三个点在同一列上的方案数自然是$m C_n^3$ 有$
阅读全文
摘要:我在有0环的图里跑了最短路计数 ~~我可能已经是个废物啦~~ 很早之前就想写这道题啦,但是太菜了发现自己不会,今天终于写啦 首先我们建图的时候建出一个正图还有一个反图,我们对着这两个图分别跑两次最短路,求出$1$到所有点的最短路,以及所有点到$n$的最短路 如果不考虑无解的情况,我们现在就可以大力记
阅读全文
摘要:就是运用$Lucas$推一个柿子 首先是前置芝士$Lucas$定理 $$C_{n}^{m}\%p=C_{n/p}^{m/p} C_{n\%p}^{m\%p}\%p$$ 至于证明 ~~我建议去问一下Lucas本人~~ 至于这道题,我们要求的是这个柿子 $$\sum_{i=0}^kC_{n}^i\%p$
阅读全文
摘要:又抄了一篇题解 要凉了要凉了,开学了我还什么都不会 ~~文化课凉凉,NOIP还要面临爆零退役的历史进程~~ 这道题挺神的,期望+状态压缩 我们设$dp[i][S]$表示在第$i$天前,捡的宝物状态为$S$到第$K$天结束的期望收益是多少 于是我们的答案是$dp[1][0]$,也就是第一天前(就是没开
阅读全文
摘要:主席树板子了 首先看到这个暴力异常的题面,感觉做了这道题的会没命的 首先先考虑$b$在$a$子树内部的情况,这个样子的话我们需要知道子树内部所有深度小于等于$deep[a]+k$的点带来的贡献是是多少,由于这里的$a,b,c$都不能是同一个节点,所以这里的贡献就是子树大小减1,同时$b$也不能是$a
阅读全文
摘要:计数类dp还是要多写啊 看上去并没有什么思路,加上被题解里状压的标签迷惑了,于是就去看了一眼题解里设计的状态 之后就很好做了 首先先搞明白这道题的本质,就是对于任何一行任何一列炮的个数都不能超过$2$ 我们设$dp[i][j][k]$表示到了第$i$行 一共有$j$列的炮个数为$2$,有$k$列个数
阅读全文
摘要:我校最神的金牌爷安利给我的题 金牌爷告诉我这道题水爆了 ~~天啊,金牌爷竟然给我安利题目啦~~ 刚开始看着黑色的标签感觉并不是很可做,但是看到金牌爷~~脖子上闪闪发光的金牌~~真挚的眼神 我决定还是做一做 于是就开开心心的做了一道水题 我们设$dp[i][j]$表示进行到$i$次游戏,这次游戏使用的
阅读全文
摘要:我竟然又在写主席树 现在可是九月啦,我却还在写这种noip不可能考的算法 我觉得我真的要凉 题意很明确,就是给你一个序列,让从中选择$k$段连续的序列,长度必须大于等于$L$小于等于$R$,让这$k$段的和最大 本来认为这是一个非常精妙的$RMQ$问题,但是经过一番思考之后发现不会 智商不够,数据结
阅读全文
摘要:这是一篇有些赖皮的题解 (如果不赖皮的话,bzoj上也是能卡过去的) 首先由于我这个非常$sb$的方法复杂度高达$O(171^4)$,所以面对极限的$1e18$的数据实在是卡死了 但是这个时候可以骗一下 一般来说肯定会有一个点的数据到达了$1e18$,所以我们先将$1$到$1e18$之间的答案算出来
阅读全文
摘要:定义$sum(i)$表示$i$在二进制下$1$的个数 求$\prod_{i=1}^{n}sum(i)$ 暴力非常$sb$显然可以随便写,但是显然也是会$T$ 于是我们换个思路 我们设$tot$表示$sum(i)=x$的$i$有多少个,于是答案就是$x^{tot}$ 我们枚举$x$就行了,$x$显然不
阅读全文
摘要:发现好像写了一个洛谷上最快的分块 这道题曾经一度感觉非常不可做,因为$LCT$的标签以及没有什么思路的分块 但是自从$yy$出来一个错误的哈希冲突分块之后(修改的时候挂掉了),就发现这道题不就是我曾经的那个错误的思路吗 这种要往后不断的跳的题目,我们暴力往后跳的话肯定是会爆炸的,因为这样的复杂度完全
阅读全文
摘要:好水啊 但是我傻啊 我们设$dp[i][j]=\sum_{t=0}^{∞}\binom{ik}{j+tk}$ 根据组合数万年不变的递推式$\binom{n}{m}=\binom{n 1}{m 1}+\binom{n 1}{m}$ 我们有$dp[i][j]=dp[i 1][j]+dp[i 1][(j
阅读全文
摘要:非常巧妙的$dp$顺序 这道题如果按照最正常的顺序来$dp$的话,显然是没有办法做的,后效性太大了 所以我们可以巧妙的改变$dp$的顺序 我们注意到一个位置$(i,j)$要被打到的话就必须将其右上方的所有砖块都打掉,于是我们我们设$dp[i][j][k]$表示打到了$(i,j)$这个位置一共打了$k
阅读全文
摘要:挺妙的一道期望题 首先经过一番简单的思考就会发现对于线段树上的一个叶子节点$x$,深度为$deep[x]$,那么走到这个节点的概率就是$2^{deep[x]}$ 我们设$val[x]$表示叶节点$x$到根经过的所有节点的权值和为$val[x]$ 于是最后的答案就是 $$qwq \sum_{i=1}^
阅读全文
摘要:树上的路径怎么能没有树剖 显然, 次小生成树和最小生成树只在一条边上有差距 ,于是我们就可以枚举这一条边,将所有边加入最小生成树,之后再来从这些并不是那么小的生成树中找到那个最小的 我们往最小生成树里加入一条边一定会在这条边的两个端点之间形成一个环, 为了让维持树的结构,我们要断开环上的一条边,而为
阅读全文
摘要:好像随便一卡就最优解了 malao告诉我这道题挺不错的,于是就去写了写 这两个操作很有灵性啊,感觉这么有特点的数大概是需要分块维护的吧 但是并没有什么区间查询,只是在最后输出整个序列 于是我们就直接用线段树维护 设置两个标记$tag[0],tag[1]$,分别表示对应区间的最小值和最大值 初始值我们
阅读全文
摘要:递推版的数位dp 绝对的暴力美学 我们设$dp[l][i][j][0/1][0/1][0/1]$表示到了第$l$位,这一位上选择的数是$i$,$l 1$位选择的数是$j$,第一个$0/1$代表$4$没有/有出现过,第二个$0/1$代表$8$没有/有出现过,第三个$0/1$代表连续三位没有/有出现过
阅读全文
摘要:巧妙思路题 有一个重要的思想就是把大于某一个数的数都变成$1$,小于这个数的都变成$0$,这个只有$0$和$1$的序列就很好处理了 由于我们只需要在最后求出一个位置上是什么数就可以了,所以我们没有必要去精确算出来这一位上是什么数 显然是可以二分的 我们二分出来一个答案,我们按照上述的方法处理序列,之
阅读全文
摘要:开始复习字符串了 第一步肯定得是$hash$ 首先理性分析一波不可能出现长度为奇数的反回文串,对称轴位置取反之后肯定和原来不相等了 我们可以枚举所有回文串的对称中心,之后我们发现这个样子是具有单调性de 于是我们就利用$hash$来判断 将原来的串取反之后在反转,判断在对称中心左右两边二分的长度是否
阅读全文
摘要:先把之前的思路记下来 月赛的时候看到这道题感觉还是很眼熟的,毕竟做过一道叫 "康娜的线段树" 跟这道题挺像的 但仅仅也是挺像而已 于是就发现不会了 首先先分析一下性质 显然到达某一个叶子节点的概率就是 $$\frac{sum_x}{sum_{root}}$$ 这是很显然的,因为我们是一路向下走,第一
阅读全文
摘要:这是一道贪心题 刚开始yy出来一个比较$sb$的贪心 之后发现它错了 首先这道题得先把题面翻译成人话 1. 如果存在一个单词是它的后缀,且当前没被填入,代价为$n n$; 1. 如果不存在一个单词是它的后缀,代价为$x$; 1. 如果存在一个单词是它的后缀,且已填入的是它后缀的单词中序号最大的为$y
阅读全文
摘要:这个复杂度能过真是令人惊讶 本来准备是打个暴力看看能水多少分的,但是就$A$了 那也就是说我用$50 2^{15} 26 15$的复杂度跑过了五组数据 真是玄学 首先字符串题目的套路就是我们需要存一个状态表示匹配到第几位 $n include include include define re re
阅读全文
摘要:各种瞎写 之后也不知道为什么就过了 刚看到这道题感觉确实是不会的,因为我贪心太差了$QAQ$ 之后就随便$yy$呗 发现首先我们得排一下序,以$t2$也就是建筑的损坏时间为第一关键字从小到大排序 这个还是比较好考虑的,我们得优先照顾一下那些在最开始就会损坏的建筑 那之后呢,好像我们现在可以做一个$d
阅读全文
摘要:我又来复习$kmp$了 其实这道题主要是一个矩阵乘法,但是$kmp$在其中也有着非常重要的作用 我们可以这样定义状态$dp[i][j]$表示文本串进行到了$i$位置,同时文本串在最后和模式串匹配了一共$j$位的方案数 于是答案就是$\sum_{i=0}^{m 1}dp[n][i]$ 之后我们想一下转
阅读全文
摘要:关于拓扑排序的反建图还是一个非常套路的东西 比如说 "[HNOI2015]菜肴制作" 我们希望使得某一个东西在拓扑序中出现的尽可能早,这个时候就可以建出一张反图来,使得这个东西在反图中的拓扑序尽量靠后,从而使得其出现的尽可能地早 这是为什么呢,比如说我们希望$1$出现的尽可能早,直接在正图上开一个小
阅读全文
摘要:魏佬告诉我 跑得快不一定赢,不跌跟头才是成功 我决定把这句话作为魏佬的名言记下来 等以后人人捧着魏佬语录的时候,我可以告诉他们魏佬从小就开始向我传授人生经验 但我就是跑的快,而且非常快 成功卡到了b站最优解第五 突然这是我的最后一篇题解了 下午就初赛了,要退役了 好慌啊,好慌啊,好慌啊,我要退役了,
阅读全文
摘要:这题好神啊 能够$1A$真是不可思议 首先看到要求的这个柿子$\sum_{i=l}^{r}deep[LCA(i,z)]$,而且$l$和$r$并不是来自与一棵子树或者一条链,而是编号连续的一段 所以肯定没有什么办法可以一下子求出来这么多的$LCA$的 得想个好的办法转化一下 于是就想往主席树上想 首先
阅读全文
摘要:非常好的一道题 树上的状压$dp$ 根据数据范围我们就能知道这是一道需要状压的题目 所以状态就是$dp[i][S]$表示在以$i$为根的子树里,选择的状态为$S$的最大收益 这个收益只是在子树内部的收益,我们往上转移的时候继续加 显然这个东西类似于一个树上背包,我们子树和根顺次合并就好了 由于这里的
阅读全文
摘要:好颓啊,我竟然来写了一道恶心的板子 旁边的魏佬嘲讽我,还用欺负我 嘤嘤嘤 那就不膜魏佬了 嘤嘤嘤 这是一道无聊的板子 看到这些操作,我们看到这些操作就知道我们需要维护的东西了 首先那个最长的连续的$1$,显然要维护一下左最长,右最长,还是区间最长 由于有非常恶心的取反操作,所以最长的连续$0$也需要
阅读全文
摘要:倍增什么的最慢了,常数太大了 我们可以上树剖啊 但是如果用树剖来查询树上两点之间的最小边权的话,可能只能在上一棵线段树? 那也太$naive$了,尽管倍增常数大,但是还是比两个$log$快的 那干脆重构树算了 我们直接建出$kruskal$重构树,之后我们可以在重构树上直接用树剖来查询$lca$,$
阅读全文
摘要:趁魏佬去英语演讲了,赶快%%%%%%%%%%%%%%魏佬 基本上是照着魏佬的代码写的 这其实还是一个树上背包 我们用$dp[i][j][k]$表示在以$i$为根的子树里,我们修建$k$个伐木场,且$i$这个节点的树木我们运到$j$,也就是说在$j$上修建了一个伐木场,但是这个$j$并不包含在$k$中
阅读全文
摘要:这里是$sb$的$O(nm)$做法 上一篇题解里写的$O(nm)$做法并没有看懂,我真是好菜啊 这是一个用了斜率优化,但是复杂度仍然是$O(nm)$的做法 我们还是先写出简单的$dp$方程 $dp[i]$表示到达第$i$个点的时候的最大收益 于是就有 $$dp[i]=max(dp[j]+w[i] (
阅读全文
摘要:魏佬怒嘲我只会做给定一棵树,输出有多少个点这种问题 不过我连这个也不会做 还算一道不错的树上数数题目 但是我一直不会数数 求树上所有的三元组$(u,v,t)$,满足$dis(u,v)=dis(u,t)=dis(v,t)$的个数 感觉好神仙啊,一眼不会的感觉 之后试着挖掘一下性质,发现只要我们需要找一
阅读全文
摘要:先写一个五十分的思路吧 首先这道题有一个弱化版 "[POI2008]STA Station" 相当于$k=1$,于是就是一个非常简单的树形$dp$的$up\ \ and\ \ down$思想 但是我们现在要求的是这个柿子了 $$\sum_{j=1}^ndis(i,j)^k$$ 感觉这个东西很组合数学
阅读全文
摘要:感觉自己的复杂度感人 大概是$O(p \pi(m)+p^3logn)$ 还是能过去的 我们看到这么大的数据范围还是应该先想一想暴力怎么写 显然我们可以直接暴力$dp$ 设$dp[i][j]$表示已经选择了$i$数,其中所有数的和$mod\ p$为$j$的方案数 显然方程是 $$f[i][j]=\su
阅读全文
摘要:智商不够数据结构来凑 常规操作就是将树上的一条路径$(s,t)$拆分成$(s,lca)$和$(lca,t)$来看 首先考虑一下上行路径 显然对于点$x$来说,只有$dep[s]=dep[x]+a[x]$且$lca$在$x$子树外面 好像非常难算的样子,我们考虑减掉$lca$在子树内部的情况 于是我们
阅读全文
摘要:这道题真是非常神仙 第一眼看到题面肯定能想到状态是$dp[i][j]$表示$i$这棵子树里染了$j$个黑点的最大值 最大值? 什么最大值,之后就会发现这个样子完全没有办法转移 所以我们考虑一下最后的答案长什么样子 突然感觉正着做不太好做,那就干脆反着做 如果没有分出黑点和白点,那么原来的答案,也就是
阅读全文
摘要:我好$sb$啊,把$ $打成$ include include define re register define max(a,b) ((a) (b)?(a):(b)) define maxn 50005 int dp[10005][33]; int S[maxn],F[maxn],L[maxn];
阅读全文
摘要:披着期望外衣的数据结构? 非常毒瘤 我们要求得期望其实就是 $$\frac{\sum_{i=l}^{r}\sum_{j=i+1}^{r}dis(i,j)}{\binom{r l+1}{2}}$$ 好像非常难求的样子 我记得慎老师曾经教过我今天的那道线段期望的初赛题,其实这道题和那道初赛题非常的像 老
阅读全文
摘要:神仙题,抄题解 用$tp_i$表示$i$这个技能在$r$轮中被使用过的概率 于是最后的答案就是$\sum_{i=1}^nd_i tp_i$ 首先$tp_1=1 (1 p_1)^r$,也就是连续$r$轮都没有使用的概率 之后往下的$tp$靠$dp$来求 设$dp_{i,j}$表示在一共$r$轮里,前$
阅读全文
摘要:这道题好神仙啊 我们推一下$SG$函数 显然答案就是$SG(n,m)$,$SG(n,m)=0$则先手败,否则先手胜 首先几个非常明显的地方$SG(n,0)=0$,这是显然的,上来就面对了必败状态 之后看看$SG$是如何转移的 $$SG(n,m)=mex\{SG(n m,m,SG(n 2 m,m)..
阅读全文
摘要:抄题解真开心 我真是越来越菜了 这是点双的板子题,于是求出所有点双,之后讨论 1. 如果点双里之有一个割点,那么如果这个割点炸了,这个点双就出不去了,于是我们得在这个点双内部除了这个割点位置放一个 1. 如果有两个割点,那么无论哪个割点炸了,这个点双都还有其他出口,于是不用放 1. 没有割点,那么可
阅读全文
摘要:这道题挺神仙的,毕竟这个异或是需要进位的 看到区间和我们很自然的就想到了前缀和 于是处理一下前缀和答案就变成了这个样子 $$⊕\sum_{i=1}^n\sum_{j=1}^{i}pre_i pre_{j 1}$$ 众所周知异或是应该按位处理的,但是这里是减法,所以还有进位需要处理 瞬间就感觉没有办法
阅读全文
摘要:好像很久之前就看过这道题,大概是刚学$LCA$的时候 之后当时肯定是不会的呀 现在发现这道题并不是非常难 首先我们发现这个灭绝的关系非常像一棵树,我们建出这个灭绝树求一个前缀和就可以啦 那么应该怎么建这棵树呢 我们一边拓扑排序一边建树,一个点的父亲应该是其所有食物节点的$lca$,于是一边拓扑排序一
阅读全文
摘要:我旁边有一个暴力的金牌爷整天欺负我嘤嘤嘤 关我电脑,关我浏览器,还钦定我学不会贪心 没错我就是学不会了 这道题还是非常妙的 我们发现这个土的数量实在是少的可怜,于是我们甚至可以对每一个单位的土都进行贪心 分成两种情况考虑 1. 当前的$a_ib_i$,我们需要去掉一些土,可能是将一些位置的土给拿过来
阅读全文
摘要:大水题一遍 过掉比较繁琐的拆点还是非常开心的 发现每一条边的边权可能不是$1$,但是边权的范围非常小,同时点数也非常小,只有$n include include define re register define maxn 105 define LL long long const int mod=
阅读全文
摘要:状压这个东西好像没有什么能优化的高级东西,像什么斜率优化,单调队列在状压的优化上都很少见 而最常见的状压优化就是预处理优化了, 这道题就预处理一下所有点对之间连线上的点,之后压成状态就能做到$O(2^n n^2)$ 这道题的状态就非常简单了,就是一个小学生状压$dp[i][S]$状态为$S$时最后一
阅读全文
摘要:这个题简直有毒,$O((a+b)^3logn)$的做法不卡常只比$O(2^n n)$多$10$分 看到$a$和$b$简直小的可怜,于是可以往矩阵上联想 发现这个柿子有些特殊,好像可以二项式定理搞一搞 于是$x^ay^b$可以写成$(n y)^ay^b$ 于是接下来就二项式定理好了 $$(n y)^a
阅读全文
摘要:——$shallwe$:这道题是$noipDay2T2$难度 好一个$Day2T2$难度啊,我觉得我可以退役了 平方和好像没有什么办法可以快速统计,于是考虑转化一下 我们可以将题意转化成这样 求有序对$(A,B)$,取法$A$可以和取法$B$得到相同的结果 也就是可以将题目抽象成一个人进行这个游戏两
阅读全文
摘要:感觉第一问就非常神仙,还有第二问怎么被我当成组合数学题来做了 首先是第一问 期望具有线性性,于是 深度平均值的期望等于深度和的期望值的平均 设$dp_x$表示具有$x$个叶子节点的树的深度和的期望值是多少 我们发现扩展一个叶子节点的实质将其变成两个深度原来大一的叶节点,所以对整个答案的贡献也就是这个
阅读全文
摘要:想贪心就是反复$hack$自己的过程 首先这很田忌赛马,但是又不完全一样 田忌赛马保证了所有马的实力不同,因此没有平局 田忌赛马的策略是当自己最强的马比不过对方最强的马的时候,就用自己最弱的马来自爆,在没有平局的情况下确实是最优的,因为我们总是要保证自己最强的马获得了胜利 但是这里有了平局 情况就变
阅读全文
摘要:非常无脑和码农的单调队列优化$dp$ 我们发现一个时间段内移动的情况是一样的,而时间段的数目又非常少,所以可以直接按照时间段来进行$dp$ 由于每一次$dp$的移动距离都是小于等于某一个固定值的,于是可以直接上单调队列优化 复杂度$O(nmk)$ 代码 cpp include include inc
阅读全文
摘要:$kruskal$好题 $0$边的数量在某些情况下是可以无限制的调控的,前提是所有必须存在的边都在生成树里了 所以应该分别求出有哪些边是必须在生成树里的,我们可以先从大到小排序,求出有哪些$0$边必须在生成树里,之后再从小到大排序,求出那些$1$边必须在生成树里 之后剩下的边就可以随便放了,调控$0
阅读全文
摘要:这是我的第一个数据结构套数据结构 不是线段树套$Splay$,而是非常蛇皮的块状链表套树状数组 如果这里按照$\sqrt{n}$的大小来分块,那么就需要$n\sqrt{n}$的空间,可能开不下,于是我们按照$1000$分块,也就只会分出$100$个块,就能开下空间了 之后每一次查询的时候直接查询树状
阅读全文
摘要:江西竟然还有省选,而且还是可怜题,实在是有点可怕 这道题还是比较清真的,大概是最简单的可怜题? 首先看到最大值最小,就很容易想到了二分答案 对于一个二分出来的答案$mid$,去把原数列扫一遍就可以得到每一个位置至少要被覆盖几次 现在的问题变成了从$m$个区间里选择最少的区间,使得每一个位置都至少被覆
阅读全文
摘要:抄题解.jpg 完全完全不会啊,这道题简直太神了 不过抄题解可真开心 首先这道题目保证了每一个位置上的数都是不同的,那么就能得到第一种判断不合法的方式 如果两个区间的最小值一样,但是两个区间的交集为空集,那么就是不合法的 因为最小值肯定来自于同一个位置 之后就是第二种情况 上面那两个红色区间的最小值
阅读全文
摘要:靠瞎猜的数学题 首先我们先对这些向量进行一顿组合,会发现$(a,b)(a, b)$可以组合成$(2a,0)$,$(b, a)(b,a)$可以组合成$(2b,0)$,同理$(0,2a)$和$(0,2b)$自然也是可以组合成的 这个$0$很有用,可以只对一项考虑 所以如果这个时候有$2ax+2by=X$
阅读全文
摘要:我好傻啊 "题目" 先来看看长度只能为$n$的情况 那么答案非常显然是$\binom{m+n 1}{n}$ 其中$m=R L+1$ 因为我们要构造一个非降序列,显然可能一个数会被选择多次,组合非常不好做,于是我们可以把每一个数的下标加上其对应的下标那么现在的值域范围就变成了$[L+1,R+n]$,从
阅读全文
摘要:被锤爆了 被这个题搞得自闭了一上午,觉得自己没什么前途了 我又没有看出来这个题的一个非常重要的性质 我们填进去的数一定是单调不降的 首先如果填进去的数并不是单调不降的,那么填进去本身就会产生一些逆序对,感性理解好像是单调不降更优,这里还是严谨证明一下吧 考虑一下树状数组求逆序对的过程,显然就是求出每
阅读全文
摘要:$APIO$的题就是非常难啊 首先看到$k=1$的情况,显然我们只需要找到一条直径把这条直径的两端连起来就好了 因为我们连这一条新边的实质是使得这一条链上的边不需要重复经过了,我们想让走的边尽量少,自然需要重复经过的尽量少,所以$k=1$找到直径就好了 答案就是$2\times(n 1) R+1$,
阅读全文
摘要:这是一道我好像没写过的最小割 这道题如果没有那$m$条限制,我们完全可以贪心来做 但是硬要用网络流怎么办 可以转化为最小割模型 我们将源点$S$表示为耕地$A$,汇点$T$表示为耕地$B$,对于一个点$i$,源点向$i$连一条容量为$a_i$的边,$i$向汇点连一条容量为$b_i$的边 这样的话为了
阅读全文
摘要:可能我的状态比较鬼畜,应该没有人这么写 设$dp[i][j][k]$表示在第$i$行,放置油库的状态为$j$,实际上周围已经有油库或者本身有油库的状态为$k$的时候的最小花费 由于我们是按照行来$dp$的,所以这里的周围有油库只有三种可能 1. 上一行的这个位置有油库 1. 这个位置本身有油库 1.
阅读全文
摘要:这是一道大水题 首先这里只需要统计奇回文串,所以连插入特殊字符都不需要 之后我们跑一边$Manacher$的板子 搞一个后缀和数组$pre[i]$,先把所有的回文半径对应过去,之后求后缀和 之后我们倒着统计就好了,每次$ans\times=i^{pre[i]}$ 没了 代码 cpp include
阅读全文
摘要:发现好像都是化掉系数之后套上$ExCrt$的板子 这好像是一个真正的扩展扩展中国剩余定理 我们要处理的方程是这样的形式 \(c_ix\equiv b_i(mod\ a_i)\) 其中$c$用一个$std::multiset$处理就好了 好像不是普通$excrt$可以处理的形式啊 思考一下这个方程的本
阅读全文
摘要:$CDQ$ 分治的神奇操作 这个问题跟偏序问题好像差的不小啊 但是就是可以转化过去 对于一个查询我们可以把它拆成四个,也就是用二维前缀和的方式来查询 我们发现其实前缀和的定义就是多少个点的横纵坐标都小于这个点 典型的偏序问题 于是直接上$cdq$了 代码 include include includ
阅读全文
摘要:可能还是非常板子的$Manacher$ 还是先跑一遍$Manacher$处理出来所有的回文半径$r[i]$ 由于我们要找的答案是两个回文串拼了起来,所以我们考虑枚举中间这个拼接处 所以我们要找到每一个$i$,其左边能够到达$i$的和右边能到达$i$的最大的回文半径 显然并不能直接使用$i+r[i]$
阅读全文
摘要:这道题我们要求的是 $$\sum_{i=1}^N\sum_{j=1}^Mlcm(i,j)$$ 总所周知$lcm$的性质不如$gcd$优雅,但是唯一分解定理告诉我们$gcd(i,j)\times lcm(i,j)=i\times j$ 所以很容易的可以转化成这个柿子 $$\sum_{i=1}^N\su
阅读全文
摘要:设 $$f(n)=\sum_{i=1}^N\sum_{j=1}^M[(i,j)=n]$$ 我们的答案显然是 $$ans=\sum_{p\in prime}f(p)$$ 设 $$F(n)=\sum_{i=1}^N\sum_{j=1}^M[n|(i,j)]$$ 即有多少个数对的最大公约数是$n$的倍数
阅读全文
摘要:求 $$\sum_{i=1}^N\sum_{j=1}^M(i,j)^k$$ 多组询问,但是每次的$k$都是不变的 先是套路 $$f(n)=\sum_{i=1}^N\sum_{j=1}^M[(i,j)=n]$$ $$F(n)=\sum_{n|d}f(d)=\left \lfloor \frac{N}{
阅读全文
摘要:慢慢化柿子吧 要求的是这个 $$\sum_{i=1}^N\sum_{j=1}^Md(ij)$$ 神奇的约数个数函数有一个这样的性质 $$d(ij)=\sum_{x|i}\sum_{y|j}[(x,y)=1]$$ 试着从唯一分解定理的角度去理解,将$i,j$分别分解质因数 显然$d(ij)$应该等于每
阅读全文
摘要:一度自闭 这道题一看就是最小割无疑 我们假设源点$S$表示看这个电影,汇点$T$表示不看这部电影 如果一个电影的价值为正,我们就从源点点连一条容量为$val$的边,表示割掉这个边也就是选择另一边也就是不看的代价为$val$ 如果为负,就向汇点连一条容量为$ 1 val$的边,表示选择另一边也就是看的
阅读全文
摘要:这道题是真的蛇皮 方案数要开$double$真的蛇皮 首先$dp$是非常容易看出来的 设$dp[i]$表示以$i$结尾的最长子序列 显然转移方程为 $$dp[i]=max(dp[j]+1)(j=h[i],v[j] =v[i])$$ 暴力转移是$O(n^2)$的 同时第二问我们还需要求一个概率 非常简
阅读全文
摘要:求 $$\sum_{i=1}^N\sum_{j=1}^Mσ(gcd(i,j))[σ(gcd(i,j)) include include include define re register define maxn 100005 define uint long long define LL long
阅读全文
摘要:直接是最小割啊 设最终还和$S$相连表示睡觉,和$T$相连表示不睡觉 如果这个人想睡觉,那么就从源点向它连$1$的边,表示割掉这条边选择不睡觉的代价为1 如果这个人不想睡觉的话,就向汇点连一条$1$的边,表示选择睡觉的代价是$1$ 对于朋友关系的话之间连边就好了,可以使得这两个人在选择不同的时候必须
阅读全文
摘要:首先发现这个插入的非常有特点,我们可以直接利用这个特殊的性质在$Trie$树上模拟指针的进退 之后得到了$Trie$树,先无脑建出$AC$机 之后考虑一下如何写暴力 最简单的暴力对于每一个询问直接在$AC$机上匹配之后跳$fail$,跳到多少次$fail$就代表出现了几次 显然这并不能通过 考虑一下
阅读全文
摘要:这道题自然是可以反演的 按照反演的套路我们先设出两个函数 $F(n)$表示从$[L,H]$中任选$N$个数的最大公约数是$n$或者$n$的倍数的情况数 $f(n)$表示从$[L,H]$中任选$N$个数的最大公约数是$n$的情况数 非常显然的是 $$F(n)=\sum_{n|d}f(d)$$ $$f(
阅读全文
摘要:神仙的算法 我们如果要求 $$\sum_{i=1}^N\mu(i)$$ 应该怎么办 线筛显然是最常规的操作了,但是复杂度是$O(N)$的,如果大一点就挂了 这个时候就需要杜教筛这种神奇的东西了,可以在非线性时间内求积性函数的前缀和 比如说我们要求的是$f$吧 我们设一个函数$g$,同时还有$h=f\
阅读全文
摘要:首先这种匹配类问题一看就是网络流了 之后想一想怎么搞 发现题目的意思是使得 跳舞最少的男生跳的舞最多 很自然想到二分答案啊 现在转化成了一个判定性问题,能否使得所有人都跳上$k$只舞 由于喜欢和不喜欢的人放在一起并不好限制,于是只能拆点 于是我们把每个男生拆成三个点,其中一个点用来限制流量,一个点用
阅读全文
摘要:先开始化柿子 求的是 $$Ans=\sum_{i=1}^N\sum_{j=1}^N i\times j \times gcd(i.j)$$ 还是先上套路 $$F(n)=\sum_{i=1}^N\sum_{j=1}^N[n|(i,j)]i\times j=(\frac{(\left \lfloor \
阅读全文
摘要:$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]$$ 就是对于每一个后缀求出其能产生的子串,之后减掉和之前本质相同的子串 对于这个题,我们需要求出所有前缀的本质不同的子串个
阅读全文