USACO 2026 Feb Bronze 题解

A

【知识点】

  • 【1】模拟法

【题解】

我们考虑逆向得出输入字符串的第 \(i\) 位。令在第 \(i\) 个元素后输入的 O 个数为 \(x\)

如果 \(x\bmod 2=1\),则这个元素在最后的字符串中被反转,否则没有被反转。因此,如果 \(x\bmod 2=1\),第 \(i\) 位是原字符串第 \(i\) 位的反转,否则是原元素。\(x\) 在过程中更新即可。

时间复杂度:\(O(n)\).

B

【知识点】

  • 【1】模拟法
  • 【5】深度优先搜索
  • 【6】搜索的剪枝优化

【题解】

\(i\) 位是黑色表示为 \(a_i=1\),第 \(i\) 位是白色表示为 \(a_i=0\)。我们考虑使用 \(w_{i,j,k}\) 表示对于 \((i,j,k)\) 的制约个数。一个点作为黑点出现的制约数是 \(bl_i\)。一个点作为白点出现的制约数是 \(wh_i\)。因此如果我们得到一种填色方案,我们要求的是:

\[\sum_{i=1}^n\sum_{j=1}^n\sum_{k=1}^n [a_i=1]\times [a_j=0]\times [a_k=0]\times w_{i,j,k} \]

考虑对朴素计算的优化。前两个条件不满足时 \((i,j,k)\) 对答案无贡献。可以在循环 \(i\)\(j\) 时直接判断节省后面的循环。

搜索即可,使用可行性剪枝。在枚举到第 \(i\) 哥元素时,为了避免复杂的容斥计算,我们表示最大的可能合法对数,同时维护 \(s\)\(s2\)

如果一个点是白点,则 \(bl_i\)\(s\) 中减去。否则其作为白点的均不合法,因为有可能另外一个白点也被染黑,我们只在 \(s2\) 中减去 \(\frac{1}{2}wh_i\)。如果 \(\min(s1,s2)\) 小于当前的最大值,则直接对于这种染色方案不计算制约条数。

时间复杂度:\(O(2^nn^3)\)

C

【知识点】

  • 【3】递推法
  • 【3】贪心法
  • 【4】动态规划

【算法】

我们考虑 \(x=2^{i-1}\) 的情况。令 \(f_i\) 表示 \(x=2^{i-1}\) 时的花费,我们可以直接选择花 \(a_i\) 块或者买两个 \(2^{i-2}\)。得到转移方程:

\[f_i=\min(a_i,2f_{i-1}) \]

对于所有 \(x\),我们可以进行二进制拆分后累加求答案。对于部分 \(x\),可能直接用 \(1\) 个更大的 \(f_{j}\)\(2^{j-1}>x\) 更优。我们定义 \(f(x)\) 为第一个满足 \(2^{j-1}>x\)\(f_j\)。因此在拆分时,如果当前的已经花费 \(s\),剩下的数是 \(y\),我们要对每一次拆分后及拆分前的 \(s+f(y)\) 取最小值为答案。

时间复杂度: \(O(n+q\log w)\)

posted @ 2026-02-04 12:45  lzn_tops  阅读(9)  评论(0)    收藏  举报