2025.10.22 NOIP 模拟赛 题解

1比赛

订正

T1 P130074 春

题意

给定长度为 \(n\) 的序列,每次删去一个元素,每次操作后求出所有极长连续段的最大值之和,输出所有答案的异或和,\(n\le2\times10^6\)

分析

逆序操作,转化为加入,维护数组 \(p,mx\),对于每个极长连续段 \([l,r]\)\(p_l=r,p_r=l\)\(mx_l=\max a_{l\sim r}\)

容易做到 \(O(n)\)

代码

T2 P130075 夏

题意

给定 \(k_{1\sim n},b_{1\sim n},a_{1\sim t}\),对于每个 \(a_i\),求出 \(\sum_{j=1}^n [k_ji+b_j\le l][a_i\mid (k_ji+b_j)]\)\(n,l,k_i,b_i,a_i\le 10^5\)

分析

先对 \(k_i\) 根号分治,设阈值为 \(B\),则 \(k_i>B\) 的部分容易做到 \(O(n\cdot \frac lB)\)

然后枚举 \(k\),设 \(k_i=k\)\(i\) 的集合为 \(S\),已经排序

对于 \(a_j>B\) 的部分,\(j\)\(k\) 确定时,\(b\) 取值为等差数列,容易用桶做到 \(O(\sum_{k=1}^B \frac lk\frac lB)=O(\frac{l^2}B\ln B)\)

对于 \(a_j\le B\) 的部分,预处理 \(cc_{i,j}=\sum_{u\in B}[u\bmod i=j]\),精细实现可以做到 \(O(nB+\sum_{k=1}^B \frac lk)=O(nB+l\ln B)\)

总时间复杂度 \(O(n\cdot \frac lB+\frac{l^2}B\ln B+nB+l\ln B)\),假定 \(n,l\) 同阶,取 \(B=\sqrt{n\ln n}\) 可以做到 \(O(n\sqrt{n\ln n})\)

代码

T3 P130076 秋

题意

给定 \(a_{1\sim 2n}\),保证 \(1\sim n\) 分别恰好出现两次,对于每个 \(i\),求出包含 \(i\),且只包含值 \(a_i\) 恰好一次,且其它值恰好包含偶数次的区间数量,\(n\le5\times10^5\)

分析

先考虑每个值第一次出现处的答案,反过来做一遍可以得到完整答案

此时枚举右端点 \(r\),则唯一合法的 \(i\)\([1,r]\) 中最后一个恰好出现一次的位置,对于每个 \(r\) 找到 \(i\) 是容易的

\(S_i\)\(a_{1\sim i}\) 的可重集,转化为求出 \(\sum_{i=1}^r [S_i=S_r/\{a_i\}]\),使用异或哈希即可

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

代码

T4 P130077 冬

题意

给定两棵大小分别为 \(n,m\) 的树 \(A,B\),判断 \(B\) 是否作为一个连通块在 \(A\) 中出现(无根,忽略编号),\(m\le n\le1000\),多测 \(T\le10\)

分析

假定 \(A\)\(1\) 为根,对于每个 \(2\le i\le m\)\(B\) 中可能出现 \(\text{subtree}(i)\)\(B/\text{subtree}(i)\) 两种,总计 \(2(m-1)\) 种可能的子树

\(f_{u,i}\) 表示 \(A\) 的子树 \(u\) 是否能匹配 \(B\) 的第 \(i\) 种子树,转移时枚举 \(u\) 的所有儿子和 \(B\) 中删去 \(i\) 后剩余子树的编号集合,两者之间尝试匹配,若存在后者的完美匹配则找到解,若匹配大小小于 \(deg(i)-1\) 则跳过,否则找出非必经点并转移

时间复杂度 \(O(T\sum_{i=1}^n\sum_{j=1}^m d_id_j\sqrt{d_i+d_j})=O(T nm\sqrt{n+m})\)

代码

比赛结果

\(100+100+30+10\)\(\text{rk}14\)

posted @ 2025-10-24 15:24  Hstry  阅读(3)  评论(0)    收藏  举报