07 2021 档案
摘要:在期望dp时,我们需要求得每个状态的期望。 在一些题目中,终态不唯一,但是起点唯一。 比如一个机器人每次可以下/左/右走一步,走到最后一行的格子时,走的距离的期望。 如果正推,这样子根据全期望公式,还要计算取得每个状态的概率,不好做、 但是如果倒推,则到起点的状态是唯一的,概率一定是$1$。
阅读全文
posted @ 2021-07-24 08:37
celerity1
摘要:发现自己学习的换根dp全是假的。 我们在换根dp时,第一次dfs考虑处理出任意一个根的答案。 第二次dfs时,我们当前节点为$x$。 我们考虑求出$x$的某个儿子$v$的答案,从$v$回到$x$后再求出以$x$为根的答案。 这需要在$O(1)$的时间内更新dp值。 视情况用set/加减法/维护最大次
阅读全文
posted @ 2021-07-16 22:02
celerity1
摘要:CF1540D (自己做出) 把$b_i=i-b_i-1$,$b_i$变成前面小于$i$的数的个数。 如果得知$b_i$,求出原序列的方法:顺序扫描整个数组,在序列的第$b_i$个数前插入$i$。 第$i$个位置的权值是序列的值为$i$的数的排名。 发现我们只需要关心$p_i$的值,所以过程可以改为
阅读全文
posted @ 2021-07-05 20:11
celerity1
摘要:streduc (自己做出) 因为字符串拼接,从左到右考虑不太行。 把所有$|S|$集合都插入trie内 考虑把字符串消除过的点的连续段拿出来。 设$f_{l,r,p}\(表示原串\)[l,r]$区间,外部恰好有一个串,走到trie的$p$节点,是否可行。$g_{l,r}\(表示\)[l,r]$是否
阅读全文
posted @ 2021-07-05 18:35
celerity1
摘要:简单题。 看代码。 #include<bits/stdc++.h> using namespace std; #define N 200010 #define M 200010 int h[M],nxt[M],v[M],w[M],s,t,dep[M],ec,n,k; char st[1000][10
阅读全文
posted @ 2021-07-04 21:27
celerity1
摘要:简单题 快速计算摆放棋子攻击对数的方法:拿出每个行/列连续段,设它有$p$个点。 则$ans+=\frac{p(p+1)}{2}$ 一个棋子会让它所在的行/列连续段贡献+1。 用一条路径进行限制。 $\frac{p(p+1)}{2}$可以拆边。 具体看代码。 做了这么久发现看错题了,口可 #incl
阅读全文
posted @ 2021-07-04 21:15
celerity1
摘要:拟阵的一个应用... 如果没有字典序限制,显然可以用费用流解决。 给右边每个点赋一个权值$d$。 如果右边某个点是$A$类点,则权值等于它的代价,否则ans+=它的代价,权值=它的代价的相反数。 $s\to i$连接费用$0$流量$1$的边。 $i\to j+n$如果$i,j$能匹配则连接费用$0$
阅读全文
posted @ 2021-07-03 22:21
celerity1
摘要:https://csacademy.com/contest/round-79/task/smallest-subsets/ 给定一个元素全为正整数的序列$a$,定义一个长度$k$的子序列$i$的权值为$\sum_^ka_$ 询问权值排名第$l$小的子序列的权值。 做法:先考虑空序列,把它插入堆内。
阅读全文
posted @ 2021-07-03 20:00
celerity1