2025.10.18 NOIP 模拟赛 题解

比赛

订正

T1 P130067 删数游戏

题意

给定递增的 \(a_{1\sim n}\),若 \(a_i\equiv i\pmod 2\) 则可删去 \(a_i\),并令后面的值向前平移,求可删去的最大数量并给出字典序最大的删除顺序(值而不是下标),\(n\le10^5\)

分析

选择最后一个满足 \(a_i\equiv i\pmod 2\) 的位置删去,显然字典序最大,且这样操作后它之后所有位置都变为合法,从后往前依次删去,显然字典序最大

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

代码

T2 P130068 货币改革

题意

定义一个集合 \(S\) 可表出 \(k\) 当且仅当存在 \(c_{1\sim k}\) 使得 \(\sum c=k\)\(\forall i,c_i\in S\),给定 \(c_{1\sim n}\),对于每个前缀,求出不能表出的最大值或判定不存在上界,保证 \(c_{1\sim n-1}\ge 2,c_n=1\)\(n\le100\)\(c_i\le400000\)

分析

同余最短路模板,使用 \(\text{dp}\)\(\text{SPFA}\) 可过

时间复杂度 \(O(nV)\)

代码

T3 P130069 机场代码

题意

给定字符串 \(s\),令 \(f(l,r,k)\) 表示 \(s[l:r]\) 所有长度为 \(k\) 的自序列中字典序最小的,\(q\) 次询问,每次给定 \(l_1,r_1,k_1,l_2,r_2,k_2\),求出 \(f(l_1,r_1,k_1)\)\(f(l_2,r2,k_2)\) 之间的大小关系,\(|s|\le10^6,q\le10^5\),字符集取全体大写字母

分析

显然最优情况为每次取出 \([l,r-k+1]\) 中最小的字符,然后 \(k\) 减一,并令 \(l\) 移到上一个选择的之后

因此每个 \(f(l,r,k)\)\(\text A^{X_0}\text B^{X_1}\text C^{X_2}\cdots \text Z^{X_{25}}s[L:r]\) 的形式,其中 \(X_i\ge 0\) 且尽量取到最大,比较容易做到 \(O(q(\log |s|+|\sum|))\),求出该形式可以二分做到 \(O(|\sum|\log|s|)\)

总时间复杂度 \(O(\sum (|s|+q|\sum|\log|s|))\)

代码

T4 P130070 树切割游戏

题意

给定一棵 \(n\) 个点的树,\(q\) 次询问,每次删去一条边,加入一条边,保证修改后还是树,标记加入的边,双方轮流操作,每次选择一条未标记过的边标记,要求任意时刻所有被标记的边在一条链上(可以不连通),判断必胜方,所有修改之间独立,\(n,q\le10^5\)

分析

显然加入边的两端独立,考虑分别计算出两侧的 \(\text{SG}\) 函数值

先考虑根为 \(1\) 的情况,令 \(f_u\) 表示子树 \(u\) 内的 \(\text{SG}\) 函数,则

\[f_u=\text{mex}_{t\in\text{subtree}(u)} \{f_t\oplus ((dep_t-dep_u-1)\bmod 2)\} \]

\(S_u=\{f_t\oplus ((dep_t-dep_u-1)\bmod 2)\mid {t\in\text{subtree}(u)}\}\)

对于 \(u\) 和它的一个儿子 \(v\),若 \(f_v=2k\) 显然 \(0\sim 2k-1\) 都在 \(S_v\) 中,因此 \(0\sim 2k\) 都在 \(S_u\) 中,若 \(f_v=2k+1\) 可得 \(0\sim 2k-1\)\(2k+1\) 都在 \(S_u\)

因此令 \(ss=\{f_v\mid v\in\text{son}(u)\}\),若 \(\max ss-1\in ss\)\(2\nmid \max ss\),则 \(f_u=\max ss+1\),否则 \(f_u=\max ss\oplus 1\)

这样可以做到 \(O(nq)\)

通过各种方式可优化到 \(O((n+q)\log n)\)

代码

比赛结果

\(100+100+25+40\)\(\text{rk}11\)

posted @ 2025-10-21 15:48  Hstry  阅读(16)  评论(0)    收藏  举报