NOIP2023 题解

blog

NOIP2023 T1

可以对字符串随意交换,即可以重排每个单词。对于询问 \(i\),最优方案显然是将 \(\forall j\ne i\)\(w_j\) 重排至字典序最大,将 \(w_i\) 重排至字典序最小。

这件事情本质是将 \(w_i\)\(\min\limits_{j\ne i} w_j\) 比较。在开始时将全部串重排至字典序最大,取出最小与次小的编号(即为 \(p\)\(q\))。

询问时,单独重排 \(w_i\) 至字典序最小;若 \(i\ne p\),只需比较 \(w_i\)\(w_p\);否则比较 \(w_i\)\(w_q\) 即可。

code,时间复杂度 \(O(nm\log m)\)\(O(nmV)\)

NOIP2023 T2

初始化 \(x_i=I_i\)。发现过程无关紧要,模拟后得出最终的 \(x_i\) 值(可能为 \(\texttt{T},\texttt{F},\texttt{U},I_t,\lnot I_t\)),记为 \(ans_i\)

如果最后存在 \(ans_i=\texttt{U}\) 或者 \(ans_i=\lnot I_i\)(自己不等于自己),那么全部最终值和 \(I_i\) 有关的点都得填 \(\texttt{U}\) 了。

具体可以采用记忆化搜索实现。

code,时间复杂度 \(O(n+m)\)

posted @ 2023-11-22 11:13  liangbowen  阅读(232)  评论(1编辑  收藏  举报