2026.1.3 NOI 模拟赛 题解
T1 P130243 [省选二十连测第十套 ] --T1--模拟
题意
以二进制形式给出 \(a_{1\sim n}\)(\(a_i\in[0,2^m)\)),保证两两不同,对于每个 \(1\le i\le n\) 求解以下问题:初始 \(S=\{a_j\mid 1\le j\le i\}\),进行 \(i-1\) 次操作,每次选择 \(x\in[0,2^m)\),删去 \(S\) 中和 \(x\) 异或起来最小的值,求所有方案中最终保留数字为 \(a_i\) 的方案数,\(n,m\le3000\)
分析
令二进制位从前往后编号为 \(0\sim m-1\),编号 \(j\) 的权值为 \(2^{m-j-1}\)
先用 \(a_{1\sim i-1}\) 建立 \(\text{Trie}\),令 \(o_j\) 表示其中与 \(a_i\) 第一个不同的二进制位为 \(j\) 的 \(a\) 的数量(实际对应 \(\text{Trie}\) 的一个子树),令 \(c_j\) 表示其中 \(j\) 及更高位上都和 \(a_i\) 相同的 \(a\) 的数量(显然 \(c_j=\sum o_{j+1\sim m-1}\)),容易在 \(\text{Trie}\) 上 \(\text{dfs}\) 时求出
若 \(c_j\) 对应子树内的 \(a\) 还没有删完,则要删去 \(o_j\) 对应子树内的 \(a\),\(x\) 的第 \(j+1\sim m-1\) 位任取,\(0\sim j-1\) 位必须和 \(a_i\) 相同,第 \(j\) 位必须不同
若已经删完,则 \(x\) 的第 \(j\) 位任意
枚举 \(0\le i\le o_j\) 表示删完 \(c_j\) 时 \(o_j\) 中剩余 \(i\) 个,则 \(x\) 值的方案数为 \(2^{i(m-j)}2^{(o_j-i)(m-j-1)}\),要使 \(c_j\) 中最后一个元素恰好为倒数第 \(i+1\) 个,\(x\) 排列的方案数为 \(\binom{o_j+c_j-i-1}{c_j-1}\),贡献为
令 \(F(n,k)=\sum_{i=0}^n 2^i \binom{n+k-i}{k}\)
则贡献为 \(2^{o_j(m-j-1)} F(o_j,c_j-1)\)
而
容易预处理
总贡献为所有 \(j\) 的贡献之积,容易在 \(\text{Trie}\) 上统计
总时间复杂度 \(O(n^2+nm)\)
T2 P130244 [省选二十连测第十套 ] --T2--数据结构
题意
给定排列 \(p_{1\sim n}\),每个位置有权值,初始为 \(0\),对于一个区间,定义一次正则加为令区间内所有前缀最大值位置的权值加一,定义一次加为令区间内最大值位置的权值加一,定义一次正则查询为求出区间内所有后缀最大值位置的权值和,定义一次查询为求出区间最大值位置的权值,所有查询操作在所有修改操作之后,对于所有可能的 \(2^{n(n+1)}\) 种选择被加的区间和被查询的区间的方案中,求出依次进行正则加、正则查询得到的查询结果与依次进行加和查询得到的结果相同的方案数,\(n\le500\)
分析
对于查询,认为它是从右到左的连边,修改是从左到右的连边
首先建立笛卡尔树
对于区间 \([l,r]\),设其中最大值位置为 \(M\)
若存在左端点在 \([l,M]\) 右端点在 \([M,n]\) 的修改,则 \(M\) 位置权值加一,对于所有左端点在 \([1,l-1]\) 右端点在 \([M,r]\) 的查询,\(M\) 位置是后缀最大值但不是最大值,因此查询得到的结果不同,即 若存在 \([l,M]\) 到 \([M,n]\) 的修改则不能存在 \([M,r]\) 到 \([1,l-1]\) 的查询
对应地得到 若存在 \([M,r]\) 到 \([1,M]\) 的查询则不能存在 \([l,M]\) 到 \([r+1,n]\) 的修改
即对于笛卡尔树上的一个子树,前缀中若干位置可以作为查询的起点向 \([1,l-1]\) 连边,后缀中若干位置可以作为修改的起点向 \([r+1,n]\) 连边,显然对于子树外的点只需要考虑两者的数量,令 \(dp_{u,l,r}\) 表示子树 \(u\) 中 \(l\) 个向左 \(r\) 个向右的方案数
对于空子树 \(dp_{\varnothing,0,0}=1\)
对于结点 \(u\),设左儿子为 \(ls\),右儿子为 \(rs\),两者子树大小分别为 \(lsz\) 和 \(rsz\)
若存在 \([l,M]\) 到 \([M,r]\) 的修改和 \([M,r]\) 到 \([l,M]\) 的查询,则转移为 \(dp_{ls,l,ml}\times dp_{rs,mr,r}\to dp_{u,l,r}\),显然左侧的 \(ml\) 部分和右侧的 \(mr\) 部分之间对子树 \(u\) 向左向右的数量无贡献,系数为 \((2^{(ml+1)rsz}-1)(2^{(mr+1)lsz}-1)\),分别表示从可能的 \([l,M]\) 到 \([M,r]\) 的修改中至少选择一个,从可能的 \([M,r]\) 到 \([l,M]\) 的查询中至少选择一个
若只存在 \([l,M]\) 到 \([M,r]\) 的修改,则转移为 \(dp_{ls,l,ml}\times dp_{rs,mr,r}\to dp_{u,l,ml+1+r}\),显然 \(u\) 和左侧的 \(ml\) 部分都可以向子树 \(u\) 的右侧贡献,系数为 \((2^{(ml+1)rsz}-1)\)
只存在 \([M,r]\) 到 \([l,M]\) 的查询时类似
若两者都不存在,则转移有三个:\(dp_{ls,l,ml}\times dp_{rs,mr,r}\to dp_{u,l,ml+1+r},dp_{ls,l,ml}\times dp_{rs,mr,r}\to dp_{u,l+1+mr,r},-dp_{ls,l,ml}\times dp_{rs,mr,r}\to dp_{i,j}\),因为不能同时存在 \(ml\cup \{u\}\mapsto [r+1,n]\) 和 \(mr\cup \{u\}\mapsto [1,l-1]\)
\(dp\) 过程容易优化到 \(O(lsz\times rsz\times (lsz+rsz))\),总时间复杂度 \(O(n^3)\)
T3
比赛结果
\(15+10+10\),\(\text{rk}7\)

浙公网安备 33010602011771号