NOIP 模拟赛:2024-11-20

T1:

本题中令记号 \(a ^{\wedge} b\) 表示幂运算 \(a^b\) 。一个幂运算代数式可以通过加括号改变所有运算符号的运算顺序,否则从左到右运算,例如 \(a ^{\wedge} ((b ^{\wedge} c)^{\wedge} d) ^{\wedge} e\)表示\(\displaystyle (a^{((b^c)^d)})^e\)

对一个代数式 \(a_1\ ^{\wedge}\ a_2 \ ^{\wedge} \ \cdots \ ^{\wedge}\ a_n\) ,你可以任意加括号,求能得到的最小运算结果,你只需要输出最小结果对 998244353 取模的值。

容易想到把第一个 \(1\) 会把后面的无效,而对于前面的数,因为此时 \(ab\le a^b\)\(a,b\ge 2\)),肯定不加括号最优。


T2:

一棵\(n\)个结点的树,每个结点\(u\)有给定的点权\(a_u\)。你需要为每一条边赋一个\([1,m]\)范围内的整数边权,要求每个结点\(i\)的邻边边权的中位数不超过\(a_i\)。求树的边权和的可能最大值,若无满足条件的赋权方案则输出-1。

\(\dagger\) 本题中,认为\(k\)个数的中位数为从小到大的第\(\displaystyle \Big\lfloor \frac{k}{2} \Big\rfloor+1\)个数。

容易发现每条边只会取 \(a_u,a_v,m\) 中的一个。\(dp[i][0/1/2]\) 表示 \(i\) 的子树,\(i\rightarrow fa_i\) 的边权取 \(a_u/a_v/m\)


T3:

棋盘

题目描述

对一个\(n\times m\)的01矩阵,有一些位置的数字是确定的,另一些不确定。你需要填充不确定的位置的数字,要求其不能包含如下两种\(2\times 2\)子矩阵

\[\left[ \begin{matrix} 1 & 0 \\ 0 & 1 \end{matrix}\right] \ \left[ \begin{matrix} 0 & 1 \\ 1 & 0 \end{matrix} \right] \]

请判断能否按要求填充,若能则给出任意一种方案。

先把能直接确定的填了。

如果还有括号,我们采取这样一种方案:随便挑一个,然后把能由它直接确定的都填了;循环往复。断言这不会有问题。

证明:

假设当前局面开始时不存在已经不合法的。当填了一连串问号后,若导致矛盾,必然是恰好填进了一个 \(2\times 2\) 的不合法子矩阵,但是这应该在之前就确定了的。


T4(未完善):

一个\(2n\)长度的序列\(a\),下标范围\(1\sim 2n\),需要保证初始时值为\(1\sim n\)的元素各两个。

之后,开始反复执行如下操作,直到操作后序列\(a\)不发生变化:

  • 从前到后考虑每一个位置\(i\),若\(a_i>0\)且此时值为\(a_i\)的元素并非唯一(即存在\(j > i\)使得\(a_j=a_i\)),则将\(a_i\)减小1,然后结束本次操作。

容易发现\(a\)最终一定会有恰好\(n\)个位置非0。现在给出\(n\)个非0位置的下标,求可能的不同初始序列\(a\)的个数,答案对998244353取模。

显然应该从后往前考虑,因为前面的数不会影响后面的操作。

容易想到最后会留下一个 \(1\sim n\) 排列。证明考虑当前序列的最大数 \(x\),最靠后的 \(x\) 一定会留下来,前面的总会变成 \(x-1\);然后在所有剩下的 \(x-1\) 中,又会留下最后一个 ……

举个例子观察一下,比如最后留下了 \(002013\),最后一个 \(0\) 为了变成 \(0\),只能填 \(1\);倒数第二个 \(0\)\(1\sim 3\),第一个 \(0\) 也是填 \(1\sim 3\)。注意到无论后面的 \(0\) 填什么,都会导致前面的 \(0\) 少一种可能。而这个 "可能" 就是这个 \(0\) 后面从 \(1\) 开始最多可以连续几个数都有。

记当前位置从 \(1\) 开始连续个数为 \(x\),在各个位置的 \(x\) 组成一个序列 \(\{x_i\}\)。而 \(x_i\) 相同的初始序列,最终的方案数也一样,这可以作为 DP 中将不同方案统一计算的手段。

粗略考虑 \(dp[i][j]\) 为填了 \(i\sim 2n\),从 \(1\) 连续能到 \(j\) 的方案数。如果 \(i-1\) 最终留下 \(0\) 是好求的,只需要乘以一个系数(\(j\) 减去后面 \(0\) 的个数)即可;但如果不是 \(0\),我们为了知道填了它会让 \(1\) 能连续到哪里,也需要知道后面所有填过的位置,这就不可避免走向状压。

这里有一个经典的 trick:当一个东西很重要而无法确定时,不妨不确定,当真的要用到时再拿出来。

放在这题里,也就是 \(dp[i][j]\) 只考虑 \(1\sim j\) 的填法。只有当 \(dp[i][j]\) 试图向 \(dp[i][\ge j+2]\) 转移,我们才把后面空着没填的 \(1\) 取出若干个填了。

但是 "取出若干个填了" 的方案数到底是多少?这里不清楚 …… 而且如果后面填了两个 \(a\),前面还要避免使用 \(a\),比较复杂。目测还要一个预处理 DP。

posted @ 2024-11-22 18:38  FLY_lai  阅读(4)  评论(0编辑  收藏  举报