拆贡献,从小到大枚举 $i$ ,在根到 $i$ 的链上增加贡献,查询时查询根到 $i$ 的贡献和。
1 |
|
钦定最后一个 “(” ,再在前面选择 $i$ 个,后面选择 $i + 1$ 。用范德蒙德卷积。
1 |
|
类似的题目有一个性质:如果在某操作是有收益的,那么一定全部操作;否则全部不操作。所以不必考虑卖出、买入多少的问题,只考虑在何处买入、卖出的问题。
记 $f _ i$ 为第 $i$ 天的最大现金值。考虑从某一天转移。如果一个 $f _ i$ 已经求出,可以直接根据 $A, B, Rate$ 算出 $A, B$ 金券的数量,记为 $x _ i, y _ i$ ,那么有转移方程 $f _ i = \max _ {j < i} x _ j A_ i + y _ j B _ i$ 。
从 $a$ 转移到 $i$ 比从 $b$ 转移到 $i$ 优 $x _ a < x _ b$ 当且仅当:
$$
\begin {array} {c}
x _ a A _ i + y _ a B _ i & < & x _ b A _ i + y _ b B _ i \\
(y _ b - y _ a) B _ i & < & (x _ b - x _ a) A _ i \\
\frac {(y _ b - y _ a)} {(x _ b - x _ a)} & < & \frac {B _ i} {A _ i}
\end {array}
$$
$x _ i$ 没有单调性,考虑 CDQ 分治,左侧按照 $x$ 排序,构建凸包,右侧按照 $k$ 排序查询。
1 |
|
如果没有“不重叠”的限制,即为 KMP 的 next 数组。现在要求长度不能超过串的一半,那么就反复跳 next 直到得到答案为止。
1 |
|
考虑对于每个前缀求出循环多少次,求出 Z 函数,那么 $\frac { z _ i } i$ 即为循环次数。考虑不同的循环次数,奇偶分开讨论,对于奇数次,每增加两次循环对 C 前后出现奇数次字符的个数没有影响,只需考察这个前缀中 A 的划分即可,满足 $F(A) \le F(C)$ 即可。对于偶数次,$F(C) = F(S)$ ,不用再单独计算,每个 $A$ 的划分都可以作为答案。枚举前缀的同时维护 $A$ 。
1 |
|
建 AC 自动机,需要找到一个环并且永远不接触到病毒的终点位置。建 AC 自动机后,原来 Trie 树上的边已经被压缩过了,可以直接使用。有向图找环不能写假了。
1 |
|
根据题意建出 Trie 。考虑 AC 自动机上一点 $p$ ,其子树内任意一点 $s$ 一定出现了 $p$ 表示的串。考虑离线,对于每一个点回答这个点作为 $y$ 的答案,对于每个 $x$ ,从根节点到 $y$ 节点上每一个在 $x$ 子树内都有贡献。在树上遍历维护从根开始的链,每次查询子树和用树状数组维护。
1 |
|
四维偏序,排序 + CDQ + CDQ + 树状数组 。一个问题:在这类用左侧信息更新右侧信息的问题中,必须将左侧完全计算完才能用于更新右侧,因此 CDQ 的顺序一定是中序遍历,这样就不能归并排序,用 $O(n \log n)$ 排序就会使复杂度增高,因此最后一层使用树状数组而非继续 CDQ ,复杂度可以保证为 $O(n \log ^ 3 n)$ 。
1 |
|
板子题。做法很多。较优的做法是 CDQ 分治、扫描线。这里挑战分块套树状数组。有多个 $x$ ,散块用 vector 排序后维护。
1 |
|
阶梯 Nim 。先手必败当且仅当奇数位置异或和为 $0$ ,逐位考虑,DP 即可。最后剩下的位置给偶数位或者放弃,插板即可。
1 |
|
白色比较菜,胜利当且仅当开局第一步可以吃掉黑色。黑色考虑尽快赢,白色考虑最后输。对于所有决策取最优即可。
1 |
|
二分图博弈模板题。求所有存在情况不在最大匹配的点。对于每个点,如果删除,最大匹配就减少,那么一定在最大匹配中。
1 |
|
求出 Z函数,合法当且仅当 $z _ i = n - i$ 。
1 |
|
1 | void init () |
注意到个数不能少于前一个的限制,考虑差分,在 $x$ 处取石子相当在差分序列上 $x$ 的石子移动到 $x + 1$ ,即反向的 StairCase Nim 。套结论即可。
1 |
|
注意到白棋只能向右,黑棋只能向左,那么一对“黑棋-白棋”(最左侧是白棋,最右侧是黑棋,因此不存在和边界构成一个区间的情况)距离为 $a$ ,可以视作一堆个数为 $a$ 的石子,双方都可以取,同时中间还可以有一些空缺。每次最多选择 $d$ 堆石子,即 $K-Nim$ 游戏,先手必败当且仅当对于所有二进制位的和 $s$ 有 $(d + 1) | s$ 。
考虑 DP $f _ {i, j}$ 表示前 $i$ 位用了 $j$ 个位置满足二进制每一位都是 $d + 1$ 的倍数,每次考虑从 $\frac m 2 $ 堆石子选择出若干堆选择这一位,用组合算。最后统计答案,总方案 $\binom n m$ 减去所有不合法的方案。此时石子个数都已确定,将一对“黑棋-白棋”视作一个整体,还剩下 $n - i - \frac m 2$ 的位置选出 $\frac m 2 $ 个。
1 |
|
终止态的 $SG$ 值为 $0$ 。
$SG (u) = \mathrm {mex} _ {(u, v)} {SG(v)}$ 。
多个独立游戏的 $SG$ 函数值为所有游戏的异或和。
先手必败当且仅当 $SG = 0$ 。
对于 Anti 规则,先手必败当且仅当:
$n$ 个石子,两人轮流取,每次可以取 $[1, m]$ 个,不能取者败。
先手必败当且仅当 $(m + 1) | n$ 。
$n$ 个石子,两人轮流取,每次可以取 $[1, m]$ 个,不能取者胜。
先手必败当且仅当 $n \equiv 1 \pmod {m + 1}$ 。
$n$ 堆石子,两人轮流取,每次可以选择第 $i$ 堆取 $[1, a _ i]$ 个,不能取者败。
先手必败当且仅当 $\oplus _ {i = 1} ^ n a _ i = 0$ ,即对于二进制下每一位的和 $s$ 均满足 $2 | s$ 。
$n$ 堆石子,两人轮流取,每次可以选择第 $i$ 堆取 $[1, a _ i]$ 个,不能取者胜。
先手必败当且仅当:
$n$ 堆石子,两人轮流取,每次可以选择最多 $k$ 堆取任意多个,不能取者败。
先手必败当且仅当二进制下每一位和 $s$ 均满足 $(k + 1) | s$ 。
$n$ 个石子,两人轮流取,每个人可以取任意多个,但是不能取完,每个取的个数不能超过上个人取的个数的两倍,不能取者败。
先手必败当且仅当 $n$ 位斐波那契数。
$n$ 堆石子,两人轮流取,每个人可以选择第 $i$ 堆取 $[1, a _ i]$ 个放入第 $i - 1$ 堆中(第 $1$ 堆直接取走),不能取者败。
先手必败当且仅当 $\oplus _ {i = 0} ^ {\lfloor \frac {n - 1} 2 \rfloor } a _ {2i + 1} = 0$
$n$ 堆石子,两人轮流取,每次可以选择第 $i$ 堆取 $[1, a _ i]$ 个,或者将一堆石子分为不为空的两堆,不能取者败。
$a$ 个石子有 $sg$ 函数 $sg(a) = \begin{cases} a - 1, a \equiv 0 \pmod 4 \\ a, a \equiv 1, 2 \pmod 4 \\ a + 1, a \equiv 3 \pmod 4\end{cases}$
先手必败当且仅当 $\oplus _ {i = 1} ^ n sg(a _ i) = 0$ 。
$2$ 堆石子,两人轮流取,每个人可以选择一堆取任意多个或者两堆取相同个,不能取者败。
第 $k$ 个先手必败局面记作 $(a _ k, b _ k)$ ,$a _ k$ 为前 $k - 1$ 个 $a, b$ 没有出现的最小正整数,$b _ k = a _ k + k$ 。其中 $a _ 1 = 1, b _ 1 = 2$ 。
存在通项公式:$a _ k = \lfloor k \frac {1 + \sqrt 5} 2\rfloor$ 。
给定一个二分图,一个棋子,两人轮流将棋子在二分图的边上转移,不能到之前到过的点,不能转移者败。
先手必败当且仅当存在一种最大匹配方案,起点不被匹配。
给定一个 DAG ,一个起点,一个棋子,两人轮流将棋子在图的边上转移,不能到之前到过的点,不能转移者败。
先手必败当且仅当起点 $SG = 0$ 。
给定一个 $n$ 个点的有根树,两人轮流从树上删去一条边,并移除与根不连通的部分,无法删除者输。
$SG(u) = \oplus _ {(u, v)} (SG(v) + 1)$ 。
将树改为图,任何环内的节点可以融合成一点而不会改变图的 $SG$ 值。
]]>考虑贪心,每次尽可能选择当前最大的答案,正确性易证。为了防止选择重复的点,考虑广义长链剖分,一定只会选择链顶到叶子的路径。将所有链排序,选择前 $k$ 大即可。复杂度 $O(n \log n)$ 。
1 |
|
考虑树形 DP ,设 $f _ (u, k)$ 表示 $u$ 向下用 $k$ 条链覆盖的最大权值。那么有:
$$
f(u, k) = \max _ {i = 0} ^ k {f(u, i) + f(v, k - i)}
$$
对于 $k > 0$ ,再加上 $w _ i$ ,形式为 $(max, +)$ 卷积,发现有凸性,考虑闵可夫斯基和,用堆维护差分序列。合并时,使用堆的启发式合并。复杂度为 $O(n \log ^ 2 n)$ 。
1 |
|
记录方案使用了 bitset ,如果没有方案需求可以只记录 count() 。
1 |
|
单调性显然,考虑二分答案。
对于所有根节点的儿子记为 $q _ i$ ,对于所有军队记为 $p _ i$ ,考虑二分答案,一个 $q _ i$ 有两种情况:从其他 $q$ 转移来,从儿子来。先考虑第二种情况,考虑 DP ,$f _ i$ 表示是否合法,$g _ i$ 表示距离儿子中军队最近距离。 $f _ i$ 合法当且仅当所有儿子都合法或者 $g _ i \le mid$ 。
对于第二种情况,如果一个 $q _ i$ 中有多个军队,选择留下一个深度最大的,其他的考虑给其他 $q _ i$ ,对于没有军队的 $q _ i$ ,深度从大到小排序,选择第一个没有被选择的军队即可。
1 |
|