随笔分类 - 题解
摘要:通过打表,我们可以发现,每个数只要换最后一个就行了。 #include <cstdio> #include <iostream> using namespace std; int main() { int T; scanf ("%d", &T); while (T --) { int x; scan
阅读全文
摘要:因为题意是由后面复制到前面,那我们就从后往前考虑, 假设最后数组中全是 $x$, 因为最后一个数没有其他数能复制到它,所以 $x = a[n]$, 那我们做如下操作: 每次我们就找到末尾最长的全为 $a[n]$ 的串,设其长度为 $k$, 然后选 $n - 2k + 1 \sim n$,即将 $n
阅读全文
摘要:显然,每个 $i$ 最多交换一次, 且 $\max (max (a_1,a_2,\cdots,a_n),max (b_1,b_2,\cdots,b_n))$ 是不变的, 有对称性,不妨设两数中的最大值为 $b_i$ 中的最大值, 所以我们就让 $a_i$ 中的最大值越小越好,也就是让每个数尽量小,
阅读全文
摘要:思路分析 首先我们设 $c(i)$ 为在 $i$ 的二进制表示下,按位取反的结果, 例如:$c(50) = c((110010)_2) = (001101)_2 = 13$, 显然 $c(i) = (n - 1) - i$, 因为 $c(i)$ 是 $i$ 按位取反的结果,所以 $c(i) \& i
阅读全文
摘要:回顾 首先我们先回顾一下简单版: 设 $dp[i][j]$ 表示 $i$ 次操作,至少有 $j$ 次要加 $t$ 首先加一下初始化: $dp[i][0] = 0$,即当要加 $0$ 次时,Bob 一定会狂减,那 Alice 每次选 $0$ 最优 $dp[i][i] = i \times k$,即 B
阅读全文
摘要:设 $dp[i][j]$ 表示 $i$ 次操作,至少有 $j$ 次要加 $t$ 首先加一下初始化: $dp[i][0] = 0$,即当要加 $0$ 次时,Bob 一定会狂减,那 Alice 每次选 $0$ 最优 $dp[i][i] = i \times k$,即 Bob 要全加,那 Alice 每次
阅读全文
摘要:考虑二分答案: $f_i$ 表示完成前 $i$ 个后的最少耗时,就有转移式: $$f[i] = \max(f[j]) + a[i], i - mid\leq j \leq i-1$$ 最后检查 $f[n]$ 是否 $\leq t$ 就行了 直接做 $O(n^2)$,优化: 线段树 $O(n log_
阅读全文
摘要:我们来看一下这道题: 其实是要把 $1$ 都放在 后面,$0$ 都放在前面。 具体一点,假设 $1$ 的个数为 $k$ 个,字符串长度为 $len$, 那么我们要将 $1$ 放在 $len - k + 1$ 到 $len$,将 $0$ 放在 $1$ 到 $len - k$,分两种情况: $len -
阅读全文
摘要:我们来看一下这道题: 首先我们令 $k = \left\vert a_1 + a_3 - 2 \times a_2\right\vert$, 因为 $a_1$ 与 $a_3$ 是等价的, 所以操作 $a_1$ 和 $a_3$ 的结果不会改变,以及操作 $a_1$ 和 $a_2$ 与操作 $a_3$
阅读全文
摘要:看到题第一眼,感觉是字符串,但其实是动规 设 $dp_i$ 代表处理到前 $i$ 的最小代价,转移分两种情况: 花费 $a$ 的价值处理第 $i$ 个字符,则是 $dp_{i - 1} + a$ 的代价。 花费 $b$ 的代价处理 $i$ 到 $i - k + 1$ 的字符,假定 $i$ 到 $i
阅读全文
摘要:我们来看一下此题: 看到最大值最小,很容易想到二分答案,设二分的值为 $x$ 再设 $sum_i$ 是 $i$ 的子树中 $a_j$ 的和,$l_i$ 表示 $i$ 的子树中叶子结点的个数, 那么我们假设在点 $u$ 上,且 $u$ 的子树除了 $u$ 以外全部分配完成,那么 $u$ 上的人肯定会优
阅读全文
摘要:题目链接 我们来看一下这道题: 树上问题,容易想到树形 $dp$ 设 $dp_{i}$ 表示指定边到第 $i$ 条边要分叉多少? 容易得到 $$dp_v = dp_u \times (num_u - 1)$$ 其中 $num_i$ 为节点 $i$ 的度。 但这样在算结果时会超时。 有没有更好的方法呢
阅读全文
摘要:我们来看一下这道题: 区间问题,容易想到区间 $dp$ 那么设 $dp_{l, r}$ 表示在区间 $(l, r)$ 内有多少个回文子串。 因为两个回文串组合起来不一定是回文串,例:$aa$ 与 $bb$, 而两个非回文串组合起来有可能是回文串,例:$abc$ 与 $ba$, 所以 $dp_{i,
阅读全文
摘要:我们来看一下这道题: 首先给出一个公式: $$d(ij) = \sum\limits_{x | i}\sum\limits_{y | j} [\gcd (x, y) = 1]$$ 于是,我们就要求: $$\sum\limits_{i = 1}^n \sum\limits_{j = 1}^m \sum
阅读全文
摘要:我们来看一下这道题: 首先建出 $trie$ 树,再建出 AC自动机。 考虑容斥,即总数 - 不可读的个数。 总数 = $26 ^ m$,可用快速幂求解。 问题变成 不可读的方案 有多少个? 显然,如果一个点 $u$,$fail[u]$ 是危险节点,则 $u$ 也是危险节点。 那么用一个 $flag
阅读全文
摘要:我们来看一下这道题: 我们把图形分为 $(a, b)$ 与 $(a + c, d)$ 的矩阵 分别在两个矩阵放 $i$ 与 $k - i$ 个车 定义 $f(n, m, i)$ 表示在 $(n, m)$ 的矩阵中放 $i$ 个的方案数 讲解到此为止! $ans = \sum\limits_{i=0}
阅读全文
摘要:前置知识:KMP 本蒟蒻已经默认大佬们会了 KMP 我们来看一下这道题: 设 $nxt_i$ 表示 $A$ 中以 $i$ 为结尾的非前缀子串与 $A$ 的前缀 能够匹配的最长长度,即: $nxt_i = \max(j)$,其中 $j < i$ 并且 $A_{i - j + 1}$ ~ $A_i =
阅读全文
摘要:我们来看一下这道题: 离散,毕竟 $a_i$ 达到 $10^9$,而 $n$ 只达到 $10^3$ 动态规划 :设 $dp_{i, j}$ 代表 $A$ 的前 $j$ 个数构成以 $a_j$ 为结尾,长度为 $i$ 的严格递增子序列有多少个,则 $dp_{i, j}$ = $\sum\limits_
阅读全文
摘要:我们来看一下这道题: 求出题目所说的 $X$ 二分答案 $X$,对于每个的二分的 $mid$,拓扑排序判断是否行 $check$ 部分 : 一遍拓扑排序 判断每个节点的入度是否为零,若全为零,$return$ $true$,若又不为零,$return $ $false$ 再求出最佳顺序 拓扑排序出结
阅读全文
摘要:我们来看一下这道题: 先排序,显然前三个的积是最小的 ($a[i]$ > 0) 设最小三个为 $a[1]$ , $a[2]$ , $a[3]$ ,记 $ans$ 为序列中有多少个与 $a[3]$ 相同 结果需分情况讨论: 若$a[1] = a[3]$ ,即最小三个相同,只要从序列中与 $a[3]$
阅读全文
浙公网安备 33010602011771号