摘要:
据说是网络流棋盘模型了 我们把每一个连续子段都看成一个点,我们先把所有的行上的连续子段找出来给他们编上号,所有列上的连续子段找出来也编上号 现在每个格子都有两个编号了,$a[i][j]$表示行所对应的连续子段的编号,$b[i][j]$表示列所对应的连续子段的编号 之后我们就需要把这些子段匹配起来就可 阅读全文
posted @ 2019-01-02 21:19
asuldb
阅读(207)
评论(0)
推荐(0)
摘要:
好题啊 先考虑一些如何判掉无解的情况 我们开一个桶,存一下每个编号有多少个人必须选,之后做一个后缀和,之后我们扫一遍,如果一旦有一个后缀和$pre[i]$超过$n i+1$就不合法了,因为我们在$[i,n]$这里要安排的人已经超过$n i+1$也就是这个区间的容纳范围了,所以这样放下去肯定会导致超掉 阅读全文
posted @ 2019-01-02 19:41
asuldb
阅读(113)
评论(0)
推荐(0)
摘要:
非常玄妙的博弈入门 好神仙的题啊 其实这就是经典的$Nim$问题 如果所有石子的异或和为$0$,那么这就是一个必败状态 这个我只会感性理解一下 首先所有的石子都是$0$,异或和肯定是$0$,这也自然是一个必败状态 而如果异或和不是$0$,我们设异或和为$X$ 我们可以找到这个$X$的最高位,显然那些 阅读全文
posted @ 2019-01-02 12:24
asuldb
阅读(136)
评论(0)
推荐(0)
摘要:
发现这个数列的范围特别大但是值域的范围特别小 于是可以大胆猜测这道题值域肯定需要开到状态里去 又发现$262144=2^{18}$这个暗示非常明显啊,暗示这道题跟二进制有关系 其实也没什么关系 设$dp[i][j]$表示从$i$位置开始合并,合并出$j$这个数所合并的区间的尾位置在哪里 之后就会发现 阅读全文
posted @ 2019-01-02 12:24
asuldb
阅读(200)
评论(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
阅读(137)
评论(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
阅读(153)
评论(0)
推荐(0)
摘要:
$Ac$自动机好题了 这个题要求我们一直无法匹配到结束标记,所以我们直接在$trie$图上找到一个环,这个环可以被根节点到达,之后还没有结束标记 发现自己不会$dfs$找环,于是直接莽上$tarjan$ 之后一直写挂各种$sb$ 代码 cpp include include include incl 阅读全文
posted @ 2019-01-02 12:22
asuldb
阅读(134)
评论(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
阅读(769)
评论(0)
推荐(1)
摘要:
好像是最小表示法的板子题呢 但是不会啊,于是就变成了我的第一道$SAM$ 对于这种跟循环同构有关系的题,显然需要将原来的串倍长,之后先插入到$SAM$里去 之后我们在$SAM$上找到贪心访问最小的儿子找到一条长度为$n$的路径就好了 显然因为我们循环同构了,所以从根到根的任何一个转移必然会存在一个长 阅读全文
posted @ 2019-01-02 12:21
asuldb
阅读(137)
评论(0)
推荐(0)
摘要:
怎么全是广义后缀自动机,我$AC$自动机不服 这道题可以使用的算法很多,$SA$或者$SAM$应该都可以 但是我都不会 但是这毕竟是一个多串匹配问题,$AC$自动机还是可以刚一刚的 我们先考虑一下暴力做法 先将操作离线下来,之后对于所有的询问串建立$AC$自动机,之后我们把$n$个给出串放到$AC$ 阅读全文
posted @ 2019-01-02 12:21
asuldb
阅读(167)
评论(0)
推荐(0)
摘要:
其实这道题跟 "[AHOI2013]差异" 很像 其实这个问题的本质就是让你算所有后缀的$lcp$长度之和,但是得来自两个不同的字符串 先把两个字符串拼起来做一遍$SA$,由于我们多算了来自于同一个串内的情况 于是在分别对这两个串建$SA$,减掉这两次算出来的答案 现在的问题转化为求出$height 阅读全文
posted @ 2019-01-02 12:21
asuldb
阅读(113)
评论(0)
推荐(0)
摘要:
$AC$机上的计数$dp$啊 并没有想到反着求出不合法的串的个数,直接正面硬上 设$dp[i][j][0/1]$表示匹配出的长度为$i$,在$AC$机上位置为$j$,没有/有匹配到一个完整串的方案数 由于这个的长度是满足子结构的,可以直接$dp$求解 注意结束标记会影响到所有能通过跳$fail$到达 阅读全文
posted @ 2019-01-02 12:20
asuldb
阅读(119)
评论(0)
推荐(0)
摘要:
从原来的单串匹配变成了多串匹配 好像也没什么特别不一样的地方 原来的做法是搞一个栈,之后一旦匹配到就往前弹栈 做法也一样 但是在$AC$自动机上暴力跳$fail$是要$T$的 我们并没有必要去暴力跳$fail$,只需要存下往后跳$fail$能跳到的成功的位置是哪里就好了 这个在预处理的时候处理一下就 阅读全文
posted @ 2019-01-02 12:19
asuldb
阅读(196)
评论(0)
推荐(0)
摘要:
调自闭了 记得那是$Day1$的晚上,我和最强的yem在看pj的题 就发现了这道 之后随手推了一个斜率优化,被杨神嘲讽了 结果发现斜率优化确实是最好的做法了 我们根据时间轴来$dp$ 可以把题意转化为数轴上有很多个点,现在将数轴划分成若干个区间,最小化每一个点到其所在区间右端点的距离 之后就可以搞出 阅读全文
posted @ 2019-01-02 12:19
asuldb
阅读(166)
评论(2)
推荐(0)
摘要:
卡特兰数! 至于为什么是卡特兰数,就稍微说那么一两句吧 对于一个高度为$i$的阶梯,我们可以在左上角填一个高度为$k$的阶梯,右下角填一个高度为$i 1 k$的阶梯剩下的我们用一个大的长方形填上就可以啦 比如这个样子 之后还需要高精,但是为了简单好写,这里可以分解质因数,之后就变成另一个单精度乘高精 阅读全文
posted @ 2019-01-02 12:18
asuldb
阅读(257)
评论(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
阅读(102)
评论(0)
推荐(0)
摘要:
第一问的做法好像不太一样 首先第二问非常简单,直接在主席树上二分就好了,单次查询的复杂度$O(logn)$ 第一问并没有想到有二分这种神仙操作,依旧用的是主席树 我们可以对矩阵建出主席树,也就是像二维前缀和那样的主席树 但是众所周知我们写二维前缀和的时候是这么写的 我们发现这个样子我们根本没有办法优 阅读全文
posted @ 2019-01-02 12:18
asuldb
阅读(156)
评论(0)
推荐(0)
摘要:
"题目" 非常妙的题目,一看到就以为是一道博弈,之后就不会做了 正解非常巧妙,由于我们只需要求出最后两个人得分的差值,所以对于每一条边我们将其的权值拆成两边,分给其连接的两个点 如果这两个点被同一个人选择,那么这条边的边权就会加到最后这个人的总得分里去,如果被两个人分别选择,那么两个人每个人都获得了 阅读全文
posted @ 2019-01-02 12:17
asuldb
阅读(152)
评论(0)
推荐(0)
摘要:
noip前练一下码力还是非常有前途的 这道题本来就是想写个大暴力弃疗的,所以直接强上暴力浑身舒爽 结果发现要不是判重的时候脑残了,就能$A$了 没什么好说的呀,就是每一次都暴力$O(n)$往上下左右扩展状态,之后放到队列里,$map$判重就好了 代码 cpp include include incl 阅读全文
posted @ 2019-01-02 12:17
asuldb
阅读(229)
评论(0)
推荐(0)
摘要:
没写过几道的前缀和优化$dp$ 第一问是小学生难度的二分 第二问就直接$dp$了 设$dp[i][j]$表示当前分割点在$i$之后,前面一共分割了$j$段的方案数 利用前缀和单调性,通过二分预处理出每一个点往前能扩展到的最大位置,之后前缀和优化就可以啦 但是发现这个样子空间会炸,而这个样子还没有办法 阅读全文
posted @ 2019-01-02 12:16
asuldb
阅读(143)
评论(0)
推荐(0)
摘要:
发现我自己好像不太会做这种题目 但是还是发现有一些套路的 就是拿出中间相邻的两项来进行比较 我们拿出$i,j$这相邻的两项,设$x$表示所有排在$i$还有$j$之前的人左手上的数的乘积,那么$i$在前的充分条件是 $$\frac{x a_i}{b_j} 阅读全文
posted @ 2019-01-02 12:16
asuldb
阅读(278)
评论(0)
推荐(0)
摘要:
就是化柿子 我们求 $$\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 阅读全文
posted @ 2019-01-02 12:16
asuldb
阅读(160)
评论(0)
推荐(0)
摘要:
这道题真是非常蛇皮,卡自然溢出,还非常丧病的卡双自然溢出 一句话题意,求出最长的前缀后缀满足$AB.........BA$的形式 也就是说外面一个$next$,里面一个$next$ 本来想$kmp$的,但是发现没有办法做 于是就考虑一下递推 我们可以定住$A$的长度,来求出$B$的长度 设$dp[i 阅读全文
posted @ 2019-01-02 12:15
asuldb
阅读(251)
评论(0)
推荐(0)
摘要:
$HH$的项链加强版,数据范围和题意都加强了 题意大概:给出n个数,求区间出现次数 =2的数的个数。 一眼莫队,可是我还不会莫队啊 那就树状数组吧 回忆一下$HH$的项链,套路差不多,那道题我们维护的是每一种颜色最后出现的位置,因为根据其最后出现的位置我们就可以判断其是否在区间里 而判断这道题也很简 阅读全文
posted @ 2019-01-02 12:15
asuldb
阅读(132)
评论(0)
推荐(0)
摘要:
这好像是个暴力? 但是跑的挺快的 我们设$dp[i][j][k]$表示在第$i$行我们最远染到的位置是$j$,这一行上一共染了$k$次最多能染对多少个格子 理性分析一下啊,每一行最多也就染$m$次,这样就能把这一行格子全部都染对 所以这个空间复杂度是$nm^2$的 之后考虑一下转移 显然这就是一个非 阅读全文
posted @ 2019-01-02 12:14
asuldb
阅读(131)
评论(0)
推荐(0)
摘要:
这道题好暴力啊 发现自己刚学$OI$的时候对着这道题写了一个大搜索 发现已经看不懂了 果然我现在菜到连一年半前的我都不如了 这其实是一个基环树$dp$啦,基环树上的最大点独立集 其实很简单,我们都知道树上的最大点独立集是可以$O(n)$做出来的,而基环树和树之间唯一的一个差距就是基环树多了一条边,于 阅读全文
posted @ 2019-01-02 12:13
asuldb
阅读(170)
评论(0)
推荐(0)
摘要:
我又对着跑出正解的程序调了好久 怕不是眼瞎了 这就是个分段矩阵,我们很容易就得到了递推式 $$f[i]=f[i 1] 10^k+i$ 其中$k=log_{10}i$ 于是就是分段矩阵 之后就是代码了,没有加快速乘WA了好久 阅读全文
posted @ 2019-01-02 12:12
asuldb
阅读(202)
评论(0)
推荐(0)
摘要:
是个好东西,可以处理在模数不互质的同余方程组 核心就是用扩欧来合并方程 如果我们有两个形如$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$$ 随便移一下 阅读全文
posted @ 2019-01-02 12:12
asuldb
阅读(205)
评论(0)
推荐(0)
摘要:
一眼题,答案就是$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$个元素错排 阅读全文
posted @ 2019-01-02 12:11
asuldb
阅读(199)
评论(0)
推荐(0)
摘要:
我们看到了及其可怕的数据范围 这个样子都没有办法直接读入的数据范围应该怎么算 我们观察一下递推式$f[i][j]=a f[i][j]+b(j!=1)$ $f[i][1]=c f[i 1][m]+d$ 转移非常简单,于是可以考虑一下矩阵乘法 如果我们将这个矩阵破坏成一个链,那么就会有这种形式的递推 连 阅读全文
posted @ 2019-01-02 12:11
asuldb
阅读(177)
评论(0)
推荐(0)
摘要:
```cpp //第一次A掉紫题就来写题解,我是不是疯了 //说实话这道题还是比较裸的树上差分 //对于树上的一条路径(s,t),我们只需要把ch[s]++,ch[t]++,ch[LCA(S,T)] ,再把lca的爸爸减一 //再dfs跑一遍就可以了 //但这题还是有些不一样的,这道题里的路径终点会 阅读全文
posted @ 2019-01-02 12:10
asuldb
阅读(128)
评论(0)
推荐(0)
摘要:
这本质上是一个$dp$ 如果没有"两个上升子序列相同,那么只需要计算一次"这一个性质,那么就很好做了,我们用$dp[i]$表示以$i$结尾的上升子序列个数,那么就有$dp[i]=\sum_{j=1}^{i 1}dp[j]$ 这个暴力转移是$O(n^2)$的,我们这里可以直接用树状数组来优化,于是就变 阅读全文
posted @ 2019-01-02 12:10
asuldb
阅读(256)
评论(0)
推荐(0)
摘要:
我是发了疯才来写这道题的 我如果用写这道题的时间去写dp,我估计我能写上三四道 可怕的数据结构题 "题目" 这道题的鬼畜之处在于实在是不太好写 我们看到要求离树根尽量的近,所以我们很容易就能想到树上倍增,所以我们需要有一种能快速求出一条路径能被多少条给出路径完全覆盖 我们知道起点是固定的,要求完全覆 阅读全文
posted @ 2019-01-02 12:10
asuldb
阅读(171)
评论(0)
推荐(0)
摘要:
首先我们能够一眼看到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() 阅读全文
posted @ 2019-01-02 12:09
asuldb
阅读(168)
评论(0)
推荐(0)
摘要:
同样是从试炼场点进来的,这是一道非常需要耐心的题 不过明明就是我太菜了,真正的大佬都是一眼秒吧 首先我们有一种比较常规的暴力思路,就是用线段树来维护区间连续子段数,而拒绝掉所有与当前区间相冲突的预约我们可以通过二分来做,来查找从最开始到这个区间的区间首第一个与区间首相同的位置,和区间尾到最后最靠后的 阅读全文
posted @ 2019-01-02 12:08
asuldb
阅读(203)
评论(0)
推荐(0)
摘要:
其实我是点单调队列的标签进来的,之后看着题就懵逼了 于是就去题解里一翻,发现楼上楼下的题解说的都好有道理, f[j]表示一个再使用一个硬币就能到达i的某个之前状态,b[now]表示使用那个能使状态j变到i的硬币的面值,find表示这些花费可以到达的最大距离,由于前缀和保持单调可以用二分求解,方程不就 阅读全文
posted @ 2019-01-02 12:08
asuldb
阅读(206)
评论(0)
推荐(0)
摘要:
这是一道神奇的题目,我调了大概一天多吧 首先hack一下翻译,操作3并没有要求查询后从其所在集合里删除该元素 于是我们来看一下这三个操作 第一个合并属于并查集的常规操作 第三个操作加权并查集也是可以解决的 至于第二个操作就是这个题的难点了 对于操作二的要求“ 将 $p$ 移动至包含 $q$ 的集合中 阅读全文
posted @ 2019-01-02 12:07
asuldb
阅读(231)
评论(0)
推荐(0)
摘要:
我记得我调这道题时中耳炎,发烧,于是在学长的指导下过了也没有发题解 发现我自己的思路蛮鬼畜的 常规操作:$f[i][j]$ 表示到$i$的距离为$j$的奶牛有多少只,但注意这只是在第二遍dfs之后 在我的第一遍dfs中(就是下面那个叫build的函数),$f[i][j]$的含义是在i这课子树中到$i 阅读全文
posted @ 2019-01-02 12:07
asuldb
阅读(193)
评论(0)
推荐(0)
摘要:
这大概是我写过的除了树剖以外最长的代码了吧 首先看到有向图和重复经过等敏感词应该能想到先tarjan后缩点了吧 首先有一个naive的想法,既然我们要求只能走一次返回原点,那我们就正着反着建两遍图,分别处理出1到其他点的所能经过的最多点数和其他点到1经过的最大点数,之后找到那些和1有正边或反边相连的 阅读全文
posted @ 2019-01-02 12:06
asuldb
阅读(191)
评论(0)
推荐(0)
摘要:
比较基础的线段树了 我们要维护最大连续子串,这个可以说是一个比较套路的操作了 我们在 "[SHOI2009]会场预约" 这道题中已经比较深刻的认识到了这个套路了 对于这道题,我们显然要知道一个区间内最大的全为1(我的代码里用1表示空房)子串长度是多少,那怎么办呢 我们多开几个数组 $d[i]$表示$ 阅读全文
posted @ 2019-01-02 12:06
asuldb
阅读(169)
评论(0)
推荐(0)
摘要:
发现自己学了几天splay已经傻了 其实还是一个比较裸的dp的,但是还是想了一小会,还sb的wa了几次 首先这道题的状态应该很好看出,我们用$f[i][j]$表示在前$i$个数中(即$1 i$中)逆序对个数为$j$的方案数 于是我们考虑怎么转移,我们知道逆序对这个东西并不看重实际的大小,只用关心相对 阅读全文
posted @ 2019-01-02 12:05
asuldb
阅读(145)
评论(0)
推荐(0)
摘要:
很妙的一道题,我之前一直是用一个非常暴力的做法 就是枚举点权跑堆优化dijkstra 但是询问次数太多了 于是一直只有50分 今天终于~~抄~~做了这道题,不贴代码了,只说一下对这道题的理解 首先点权和边权不能混在一起,这是公认的,毕竟这个样子完全没有办法处理 那我们为什么要排序呢,发现其余几篇题解 阅读全文
posted @ 2019-01-02 12:05
asuldb
阅读(196)
评论(0)
推荐(0)
摘要:
可能我只适合这道题的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}^{ 阅读全文
posted @ 2019-01-02 12:04
asuldb
阅读(215)
评论(0)
推荐(0)
摘要:
这是一道非常可怕的题 细节非常之多,就连$INF$设置的太小都会导致离奇错误 根据这道题一堆废话之后,我们首先要处理的是对于每个点,他下面那个要到达的点是谁 也就是距离他最近的点和次近的点分别是谁 看起来好像有些鬼,但是我们想一想这个距离是怎么定义的 “城市 $i$ 和城市 $ j$之间的距离 $d 阅读全文
posted @ 2019-01-02 12:04
asuldb
阅读(163)
评论(0)
推荐(0)
摘要:
加权并查集 由于给出信息的是一些一个区间的和为多少,我们显然并不好处理出每一个点应该为多少,这我们根本做不到 但是我们想一下,如果要求一个区间$[l,r]$的和,那么我们是不是可以利用前缀和$p[r] p[l 1]$得到 所以一组信息$l,r,k$其实可以利用前缀和写成$p[r] p[l 1]=k$ 阅读全文
posted @ 2019-01-02 12:03
asuldb
阅读(188)
评论(0)
推荐(0)
摘要:
一直不会做,觉得这是一道神题 于是万般无奈下去~~借鉴~~抄了一下题解 发现这就是一道套路题 我们用$dp[i]$表示前$i$天的最小总花费,于是我们就可以用一个常规的老套路来做了 那就是枚举断点 我们如果可以预处理出一个数组$dis[i][j]$表示在第$i$天到第$j$天的最短路的话,方程是不是 阅读全文
posted @ 2019-01-02 12:03
asuldb
阅读(119)
评论(0)
推荐(0)
摘要:
$SDSC$讲过的题,复习一下 如果用一个小根堆来维护拓扑的话显然是会不行的,因为这样求出来的是 字典序最小的拓扑序,并不一定是1尽可能在前 因为字典序是贪心的,如果前面的一位能小就尽可能的小,并不保证1出现尽量靠前 但是如果建一个反图,求一个反向字典序最大的拓扑序呢 那么就会有大的数尽量靠前的情况 阅读全文
posted @ 2019-01-02 12:02
asuldb
阅读(162)
评论(0)
推荐(0)
摘要:
可怕的题目 直接上代码了 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 阅读全文
posted @ 2019-01-02 12:02
asuldb
阅读(135)
评论(0)
推荐(0)
摘要:
看到楼下有大佬说了网络流做法,来给大佬配个代码 ~~我们~~只有我可能都觉得如果不动态加边的话$dinic$可能跑不了这种需要中途退出的二分图匹配 正当我准备去敲匈牙利的时候突然想到这个题可以二分啊 于是二分好了 如果答案是$ans$的话,$ans 1$肯定也满足条件,所以存在单调性,我们就可以二分 阅读全文
posted @ 2019-01-02 12:01
asuldb
阅读(186)
评论(0)
推荐(0)
摘要:
感谢dzm,尽管接受了$The \text{ }\text{ }king\text{ } \text{ }of\text{ } \text{ }SD$的指点但我还是不会 至少方程还是比较好推的 状态还是很常规的,我们设$f[i][j]$表示在第$i$天持有$j$只股票的最大收益是多少 于是我们有三种 阅读全文
posted @ 2019-01-02 12:01
asuldb
阅读(172)
评论(0)
推荐(0)
摘要:
据说这是分层图最短路的板子题 但其实就是一个$dij$多带了一维状态 我们看到$k$很小所以显然我们可以设计一个这样的状态 $d[v][k]$表示从起点到点$v$免费走了$k$条路的最短路是多少 之后向下转移(即普通$dij$里的松弛)也很简单,就是有两种选泽,一种是这条路免费走,还有就是这条路不免 阅读全文
posted @ 2019-01-02 12:00
asuldb
阅读(159)
评论(0)
推荐(0)
摘要:
$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 阅读全文
posted @ 2019-01-02 12:00
asuldb
阅读(169)
评论(0)
推荐(0)
摘要:
一个串不能成为第一的情况有两种 1. 另外一个单词是它的前缀 1. 在分配字母表大小关系的时候出现了矛盾的情况 第一种很好判断,一旦我们在一个单词没有匹配完之前遇到一个结束标志,那么就说明另外一个单词是它的前缀 至于第二种,看到大小关系和是否矛盾我们很容易就联想到了拓扑排序 于是我们匹配的时候,发现 阅读全文
posted @ 2019-01-02 11:59
asuldb
阅读(215)
评论(0)
推荐(0)
摘要:
第一篇题解确实会被讨论区里的数据hack掉,那么就随便水一个不会被hack掉的题解吧 首先我们尝试着发现这道题的一些结论, 你就会发现答案是单调的不降的 这里的答案不降指的是 选择每一个位置$i$作为结尾能形成的最长区间的左端点是单调不降的 ,这个很好证明,将$i 1$这个位置作为结尾形成的最长区间 阅读全文
posted @ 2019-01-02 11:59
asuldb
阅读(139)
评论(0)
推荐(0)
摘要:
$Trie$树+$DP$ 我们只需要做一个存在性dp就好了 对于每一个字符串,我们设$f[i]$表示从$1$到$i$位是否能被完全匹配 首先$f[0]=1$,之后我们对于每一个$f[i]=1$我们都可以往下匹配 具体的匹配方法自然是丢到$Trie$树上去,从$i$这位开始,一旦遇到一个结束标记就将这 阅读全文
posted @ 2019-01-02 11:58
asuldb
阅读(164)
评论(0)
推荐(0)
摘要:
$Trie$ 树+搜索 我用的是$dfs$ 首先对于将所有的RNA片段都建到$Trie$树里去,之后来匹配那个模板串就好了 如果是匹配的位置是字母,那么我们就继续往下匹配 如果是$?$,我们必须要略过$Trie$树上的一位去匹配 如果是$ $,我们可以先考虑直接忽略这一位,也可以直接把这一位当成$? 阅读全文
posted @ 2019-01-02 11:58
asuldb
阅读(144)
评论(0)
推荐(0)
摘要:
树剖维护边双 首先我们看到在整个过程中图是保证连通的,于是我们并不需要LCT来维护连通性 而这些询问询问的是两个点之间关键路径的数量,也就是无论怎么走都必须走的数量,显然这就是两点之间的割边的数量 由于这里还有一些删除操作,树剖并不支持,所以我们先将所有的答案读进来,删掉所有的边 之后我们就$Tar 阅读全文
posted @ 2019-01-02 11:58
asuldb
阅读(194)
评论(0)
推荐(0)
摘要:
思路太妙了 刚开始yy出了一种比较自然的dp方法,就是按照游戏的进行来开始dp,设$dp[i][j]$表示第$i$个人为庄家,还剩下$j$个人的概率为多少,但是很快发现这个样子没法转移,因为没有办法确定下一个庄家是谁 于是只能将第二维压成一个状态$s$ ,$dp[i][s]$表示第$i$个人为庄家存 阅读全文
posted @ 2019-01-02 11:57
asuldb
阅读(156)
评论(0)
推荐(0)
摘要:
很妙的一道题 感觉又加深了对$KMP$还有$next$数组的理解 先来看看这个鬼畜的题意,大致就是给你一个字符串, 对于这个字符串的每一个前缀 ,要去找到这个前缀的一个最长的前缀,使得 前缀成为这个前缀的前缀倍长之后的前缀 很蛇皮的题意,之后可能就会懵逼了,这根$KMP$有什么关系 我们来考虑这样一 阅读全文
posted @ 2019-01-02 11:56
asuldb
阅读(407)
评论(0)
推荐(0)
摘要:
首先我们得贪心一下,让吃饭时间较长的人排在队首 去抄一段贪心的证明吧 现在研究在一个队伍里的人有什么性质 可以发现道题里也有一个不变量,就是对于队伍里的前$i$个人,不管他们排队的顺序如何,$a[i]$的前缀和$s[i]$是不会变的,第$i$个人会在$s[i]+b[i]$时刻吃完,这前$i$个人的吃 阅读全文
posted @ 2019-01-02 11:56
asuldb
阅读(133)
评论(0)
推荐(0)
摘要:
发现自己推得组合数好像不太一样 先把这个复杂的柿子写一遍 $$\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^ 阅读全文
posted @ 2019-01-02 11:55
asuldb
阅读(492)
评论(0)
推荐(0)

浙公网安备 33010602011771号