NOIP 模拟赛:2024-11-25

T1:

简单贪心。

T2:

有的\(n\)间屋子被\(n-1\)条双向路径连通,构成树结构。其中第\(i\)个屋子中住着一个种族\(c_i\)的狼人。

树的一个连通子图中,若其中一个种族的狼人超过了其他种族的总和,它们可以在该连通子图中进行支配。具体而言,记\(a_i\)为种族为\(i\)的狼人在连通子图中的个数总和,则支配的条件是存在\(k\)使得\(a_k>\sum_{i\ne k} a_i\)

那么,有多少个不同的连通子图会出现支配的情况?答案对998244353取模。

\(\dagger\) 连通子图指点集和边集分别为原图点集和边集的子集,且连通的图。子图不同,当且仅当选择的点集和边集至少有一个不完全相同。

考虑对每一种种族各自求一遍答案。对于一个种族,让是这个种族的结点权为 \(1\),否则权为 \(-1\),即计数有多少个连通子图的权值和为正数。

\(dp[i][j]\) 表示 \(i\) 的子树内权值为 \(j\) 的方案数。\(j\) 的范围既是当前种族总个数,又是 \(sz[i]\)。根据树上背包经典分析,复杂度为 \(O(n\cdot \sum cnt[i])=O(n^2)\)

T3:

对一个全排列\(a_1,a_2,\cdots,a_n\),给定\(m\)并依次做如下操作

  • \(a_1\sim a_m\)进行从小到大排序;
  • \(a_2\sim a_{m+1}\)进行从小到大排序:
  • ……
  • \(a_{n-m+1}\sim a_{n}\)进行从小到大排序:

注意每次排序都改变了\(a\)序列,每次的\(a_i\)指上一轮排序后处在\(i\)位置的数。

我们不知道初始的\(a\),只知道排序的最终结果,记做\(b_1,b_2,\cdots,b_n\)。求所有可能的初始\(a\)中,字典序第\(k\)小的?保证存在\(k\)个不同的初始\(a\)


若出现 \(b_{i-1}>b_{i}\),说明 \(b_i\) 这个数初始位于 \(a_{i+m-1}\),然后可以把 \(b_i\) 这个位置删掉。

由此得到一个单调上升的序列 \(b'\),即求对应 \(b'\) 的字典序第 \(k\) 小的 \(a'\),把 \(a'\) 按顺序填回 \(a\) 里还没有被确定的位置即可。
一般字典序都是试填法,看填最小的行不行 …… 逐渐增大,每次减去对应方案数。

考虑怎么求方案数。发现 \(b'_1\) 必然是在 \(1\sim m\) 的位置里随便填一个,\(m\) 种;\(b'_2\)\(1\sim m+1-pos[b'_1]\) 的剩下 \(m\) 个位置里选一个,也是 \(m\) 种 …… 直到后面的位置不够了,变成 \(m-1,m-2,\dots,1\)

然后不太清楚了 …… 总之是试填法。


T4:很少见到这么纯种的人类智慧。

给定正整数\(K\),请构造两个01串\(S,T\),使得他们恰好有\(K\)个本质不同的最长公共子序列。

额外给定参数\(L\),构造的串必须满足\(\max(\vert S\vert,\vert T\vert)\le L\)

考虑对于两个 01 串,记 \(g(x,y)\) 为有多少种不同的 LCS,使得尽量取字典序最小的结束位置时,落点恰好是 \((x,y)\)
这是对所有 LCS 不重不漏的分类。

构造初始串 \(S=1,T=11\),此时 \(g(1,1)=1,g(1,2)=0\)。设当前 \(\sum g(x,y)=k\),我们希望通过在 \(S,T\) 后面增加常数个字符,达到让 \(k+1\)\(k\times 2\) 量级的效果。这样可以在 \(2\log n\) 长度构造出来。

事实上这是可行的,我们增强结论,让所有 \(g\)\(g(|S|,|T|)=k,g(|S|,|T|-1)=1\),其余位置 \(0\)

如果要 \(k+1\),可以 \(S+0100,T+000\);如果要 \(k\rightarrow 2k+1\)\(S+101000,T+011000\) 即可。

posted @ 2024-11-28 15:57  FLY_lai  阅读(21)  评论(0)    收藏  举报