随笔分类 - Codeforces
摘要:注意到能与 $x$ 连边的 $y$ 是 $x$ 的补集的子集 那么就枚举之后dfs补集,每个全集再减去一位即可,这样是有传递性,保证一个连通块的所有数都能遍历到 这种位运算的可以通过增一位减一位得到传递性!!!
阅读全文
摘要:前两项为 $1$ 的斐波那契数列有一个性质 $f_{n + m} = f_{n+1}f_m + f_n f_{m 1}$ 通过拆成两个矩阵的乘积或者数学归纳法就可以得到 这里给每个位置加上 $f_{x l+1}$ $n=x,m=1 l$ 则相当于给每个位置加上 $f_{x+1}f_{1 l}+f_{
阅读全文
摘要:可以发现答案不大于 $n$,因为如果都是奇数可以让它们都变成偶数 如果我们假定了一个 $\gcd$,我们就可以线性得到答案,每个数向上或者向下移动到 $\gcd$ 的倍数位置 因为答案不大于 $n$,那么就有至少有 $\lceil \frac{n}{2} \rceil$ 个数操作次数不大于 $1$
阅读全文
摘要:首先建出虚树 然后就相当于多源最短路,权值为第一关键字轮数和第二关键字下标 然后dijkstra即可 建虚树过程是在维护右链,注意要把所有用到的点都初始化一遍。
阅读全文
摘要:可以发现一个 $0$ 移动之后奇偶性不变 而如果出现连续 $0$ 则它们俩的奇偶性不能发生改变 那么本质就是查询区间内有多少个 $0$ 以及它们的奇偶性 根据奇偶性进行哈希即可
阅读全文
摘要:先求出概率 设 $f_{i,j}$ 表示第 $i$ 秒电梯上有 $j$ 个人的概率 则 $f_{0,0}=1$ $f_{i + 1, j + 1} = f_{i, j} \times p$ $f_{i + 1, j} = f_{i, j} \times (1 p)$ $f_{i+1,n}=f_{i,
阅读全文
摘要:对于 $f_0=f_1=1$ 的斐波那契数列有一个性质 $$f_i=f_{i k} f_k+f_{i k 1} f_{k 1}, \forall k \in \left[1, i\right)$$ 数学归纳法证一下 当 $k=1$ 时,$f_i=f_{i 1} f_1+f_{i 2} f_0=f_{
阅读全文
摘要:$$f_i=\left(\prod_{j=1}^{k}f_{i j}^{b_j}\right) \bmod p$$ 因为这个质数的原根是 $3$,$f_i$ 就能被 $3^{a_i}$ 表示 所以就是 $$\begin{aligned} 3^{a_i}=&\left(\prod_{j=1}^{k}3
阅读全文
摘要:$dp[p][u][s_0][tol]$ 表示警察从 $p$ 走到 $u$,$u$ 相对于 $p$ 的子树内有 $s_0$ 个犯人,全局总共有 $tol$ 个犯人的最小花费时间。 当 $tol = 0$ 时,花费为 $0$。 当 $s_0=0$ 时,花费为 $\text{INF}$,因为这一步是没有
阅读全文
摘要:$f[i][k]$ 表示前 $i$ 个分成 $k$ 段,且最后一段以 $i$ 结尾的最小值 容易写出转移方程 $f[i][k] = \min \{f[j][k - 1] + calc(j+1,i)\}$ 因为具有决策单调性(打表 or 证明(不会)),就可以一种分治算法来优化 具体实现就是 $sol
阅读全文
摘要:一个 $(l,r)$ 有两个后继,所以 sg 值最大只有 2,$r-l+1$ 相等的 pair 的 sg 值相同,那么就枚举 $d=r -l+1$,对于一个 $d$ 很容易求有多少对 $(l,r)$ 满足 $r-l+1=d$ 打表发现 $d$ 的 sg 值最多只有 100 段。 设 $g_i$ 表示
阅读全文
摘要:把 'O' 看成 'X',然后枚举它的四个方向看看是否能放,然后枚举 $2^4$ 种可能表示每种方向是否放了,放了的话就标成 'X',就相当于容斥,对于新的图去dp。 dp就是铺地砖,行用二进制来表示是否放了砖块。 #include <bits/stdc++.h> const int MOD = 1
阅读全文
摘要:当前找出所有最短的重复串,删去之后,不会再出现小于等于当前长度的重复串了。 那么重复串的长度最多有 $O(\sqrt n)$ 种,删去就用后缀数组实现,枚举当前长度的分割点,求公共前缀长度和公共后缀长度,就是当前重复的长度了,然后就打标记删去即可。 #include <bits/stdc++.h>
阅读全文
摘要:首先,一个联通块里的 $a$ 之和与 $b$ 之和必须相等才有可能,然后就暴力枚举两个点,将 $a>b$ 的找一条路引向 $a<b$ 的,本来以为可以类似于拓扑排序的,就找叶子节点,但发现没办法,因为有可能没法满足最大流量要小于一个值的要求。 #include <bits/stdc++.h> con
阅读全文
摘要:修改操作只有 50 次,最多就只有 $O(50)$ 段查询,每段查询 dfs 一遍统计答案即可。 查询的是一个节点到其根路径上的节点的值,那么就 dfs 进入这个点就把这个点的值加入栈中,离开这个点就把它的值 pop 掉。具体查询方法就是对每种质因子都开一个栈,然后进入一个点就分解它的值,取每种质因
阅读全文
摘要:满足的 pair 只有 $O(nlogn)$ 对,预处理一下每对的位置,然后离线每个询问,按右端点排序,遇到一个右端点就将所有满足的左端点在树状数组上+1,然后一个询问就用树状数组查询即可。 #include <bits/stdc++.h> const int N = 2e5 + 7; struct
阅读全文
摘要:主席树实现二进制高精度。 #include <bits/stdc++.h> using namespace std; template<typename T> inline void read(T &x) { x = 0; T f = 1; char ch = getchar(); while (c
阅读全文
摘要:由期望的线性性,$E(\sum \limits_{i=1}^{k} X_i) = \sum \limits_{i=1}^k E(X_i)=kE(X_1)$,只需要求出打完 $n$ 个怪后一件武器的期望值。 $dp[i][j]$ 表示打完 $i$ 个怪后,初始 level 为 $j$ 的武器能赚的钱,
阅读全文
摘要:C. Garland 直接无脑dp。 dp[i][j][0/1] 表示前 $i$ 个数里还剩 $j$ 个奇数可以用,最后一位的奇偶性的最小值。 然后由上一位转移就行了。 #include <bits/stdc++.h> const int N = 110, INF = 0x3f3f3f3f; int
阅读全文
摘要:期末考中途的放松 但好像有点智障... A. Patrick and Shopping 刚开始不知道能有多种走法... #include <bits/stdc++.h> int main() { int a, b, c; scanf("%d%d%d", &a, &b, &c); int sum1 =
阅读全文

浙公网安备 33010602011771号