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)\)

D2T2

posted @ 2026-07-11 15:40  AAhaoxuan  阅读(56)  评论(0)    收藏  举报