UOJ NOI Round #10 部分题目
D1T2同步发布于官方题解下的“一种选手做法”。
D1T1. 麦田
一个位置在第 \(k\) 次时被操作了,则它相邻的数至少有一个在 \(k-1\) 次时被操作,且每个数只会被操作 \(1\) 次。记录一下一个数在 \(l\le L,r\ge R\) 时会被操作。
D1T2. 分披萨
Part 0 定义
每段不同元素个数相同,假设为 \(D\),对于不同的 \(D\) 计算合法序列数量。
考虑对分段方案计数,对于一个序列,将其贡献记在断点的字典序最小的分段方案上。
考虑对于一个段,我们把它分为 \(4\) 种类型:(当前段为 \(A\),下一段为 \(B\)(若 \(A\) 为最后一段,则 \(B=\varnothing\)),\(A\) 中最后一个元素为 \(x\))
- 11 型:\(A\) 中有大于等于 \(2\) 个 \(x\),\(B\) 中有 \(x\)。
- 10 型:\(A\) 中有大于等于 \(2\) 个 \(x\),\(B\) 中没有 \(x\)。
- 01 型:\(A\) 中只有 \(1\) 个 \(x\),\(B\) 中有 \(x\)。
- 00 型:\(A\) 中只有 \(1\) 个 \(x\),\(B\) 中没有 \(x\)。
显然地,11 型 是不能出现的,因为此时可以把分割 \(A,B\) 的断点往左移动一格。
Part 1 性质
将序列的段分为两个部分(“部分一”和“部分二”),部分二的第一个段是整个序列第一个 10 型 的段。
对于部分一:显然已经是字典序最小的了。
对于部分二:
结论:部分二中只要没有 01 型的段,整个划分的断点的字典序就是最小的。
结论证明:
-
必要性,如果段 \(A\) 是部分二中的第一个 01 型段,则可以将它之前的(包含它自己)部分二中的所有段的右端点,向左移动一格。
-
充分性,容易发现将部分二中的某个点往左移后,之后的点都要往左移,不合法。
也即是说,任意一个合法的序列都可以唯一地划分为 一些 01 型和 00 型的段,拼上一些以 10 开头的 10 型段和 00 型段。
Part 2 做法
直接用上述性质 DP 即可。
\(f_{i,j}\) 表示前 \(i\) 个数,\(j\) 段都为第一部分的方案数。
\(g_{i,j,w}\) 表示前 \(i\) 个数,\(j\) 段既有第一部分又有第二部分,最后一个元素为 \(w\) 的方案数。(注意到 \(w\) 不为任何已经填好的数时 \(g_{i,j,w}\) 是相同的。)
对于一个 \(i\),枚举 \(i'\) 表示将 \((i,i']\) 分为一段,贡献形式就是若干 \(f_{i,j}\to f_{i',j'},f_{i,j}\to g_{i',j',w'},g_{i,j,w}\to g_{i',j',w'}\)。系数可以预处理出:
当确定了一个段的“长度、已经填的数的个数、类型、已经填的数的种类数、\(D\) 、上一段的最后一个数与当前段中的已经填的数有无相等” 之后,可以容易计算出填剩下的部分的方案数。
需要枚举 \(D,i,j,w,i'\),但是 \(D\) 的枚举量为 \(1\sim k\),\(j\) 的枚举量为 \(1\sim{n\over k}\),因此时间复杂度为 \(O(n^4)\)。

浙公网安备 33010602011771号