2025.8.27 NOIP 模拟赛 题解

比赛

订正

T1 P110120 宇宙(universe)

题意

给定 \(v_{1\sim n}\; (v_i>0)\),对于每个 \(1\le k<n\),依次考虑每个 \(i>0\),第 \(i-\varepsilon\) 秒时选择 \(k\)\(v_x\) 加一,第 \(i\) 秒时需要保证 \(\forall x,v_x>i\),求出最大的 \(i\) 使得存在一种操作方式,到第 \(i\) 秒时仍然合法,\(n\le10^6\)

分析

一个 \(k\) 的答案为

\[\min \left\{x-1 \middle| \;\sum_{t=1}^n \max(0,x+1-v_t)>kx\right\} \]

\(f(x)=\sum_{t=1}^n \max(0,x+1-v_t)\),显然为一个下凸的分段函数,容易 \(O(n\log n)\) 求出每一段的情况

对于一个 \(k\),容易二分出一次函数和凸包的交点

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

代码

注意 \(k\) 单调增加时交点移动是单调的,因此实际可以做到除排序外 \(O(n)\)

T2 P110121 跳跃(jump)

题意

给定一个 \(0/1\)\(s_{1\sim n}\) 和参数 \(k\)\(q\) 次询问,每次给定 \(a,b\),保证 \(s_a=s_b=1\),从 \(a\) 位置出发,每次至多跳跃 \(k\) 的距离(\(a\to [a-k,a+k]\)),求出到达 \(b\) 的情况下移动到 \(0\) 位置的次数最少,部分数据点在此要求的基础上要求步数最少,\(n,q\le 5\times10^5\)

分析

对于一组询问 \((a,b)\),假定 \(a<b\)\(a,b\) 之间极长 \(0\) 段的长度依次为 \(L_{1\sim k}\),则第一问的答案为 \(\sum_i \left\lfloor\frac{L_i}k\right\rfloor\),容易 \(O(n)\) 预处理 \(O(\log n)\) 回答一次,离线则可以做到 \(O(n+q)\)

要求出第二问,先考虑 \(\max L_i<k\) 的情况,此时显然最优方案为从 \(a\) 出发跳到 \((a,a+k]\) 中的一个 \(1\) 的位置,直到 \(a\ge b\),容易倍增求出答案

\(L_i\ge k\),则从这段 \(L_i\) 中删去 \(L_i-(L_i\bmod k)\) 个,并将 \(\left\lfloor\frac{L_i}k\right\rfloor\) 计入答案,则转化为以上特殊情况

容易做到时间复杂度 \(O(n\log n+q\log n)\),空间复杂度 \(O(n\log n)\)

代码

T3 P110122 圆环(circle)

题意

一个长度为 \(n\) 的环上两个指针,初始分别在 \(1\)\(n\),两者可以在任意时刻移动任意距离,两者可以重叠和互相穿越,\(m\) 组限制形如第 \(x\) 秒时至少一个指针位于位置 \(y\),求总移动距离的最小值,\(n,m\le3\times10^5\),保证所有限制互不相同,且同一秒至多存在两个限制

分析

先删去不存在限制的秒,将剩下的时间缩起来,令 \(lm_i\)\(i\) 时刻的限制的集合,令 \(lm_0=\{1\}\)

\(f_{i,j}\) 表示第 \(i\) 秒结束时一个指针在 \(lm_{i,0}\),另一个在 \(j\) 的最小移动距离,显然 \(f_{0,n}=0\),答案为 \(\min f_m\)

\(ds_{a,b}=\min(|a-b|,n-|a-b|)\) 为环上两点之间距离

对于时刻 \(i\),令 \(p=lm_{i-1,0},r=lm_{i,0}\),则转移为

\[f_{i,p}\gets ds(q,r)+f_{i-1,q}\\ f_{i,q}\gets ds(p,r)+f_{i-1,q} \]

\(|lm_i=2|\),令 \(d=lm_{i,1}\),则

\[f_{i,d}\gets f_{i,p}+ds(p,d)\\ f_{i,\ne d}\gets \infty \]

发现实际上可以转化为对一个数组 \(dp\) 进行以下几类操作:

  1. 初始化
  2. 全设为 \(\infty\)
  3. 全局加
  4. 给定 \(t\)\(\min_i (ds(i,t)+dp_t)\)
  5. 给定 \(p,v\)\(dp_p\gets \min(dp_p,v)\)
  6. 给定 \(p\) 返回 \(dp_p\)
  7. 求全局 \(\min\)

线段树维护,每个结点 \([l,r]\) 保存 \(\min_{i=l}^r dp_i,\min_{i=l}^r (dp_i+i),\min_{i=l}^r (dp_i-i)\) 和加法标记,全局置为 \(\infty\) 等价于全局加 \(\infty\),注意范围

总时间复杂度 \(O(n+m\log n)\)

代码

T3 P110123 翻转(reverse)

题意

\(R_k(n)\) 表示在 \(k\) 进制下 \(n\) 数位逆序得到的结果,给定 \(k,n\),求出 \(\sum_{x=1}^n [x\mid R_k(x)]\)\(2\le k\le 16,n\le k^{100000}\)

分析

对于合法的 \(x\),显然 \(|R_k(x)|\le |x|\),而 \(x\mid R_k(x)\),因此 \(1\le \frac{R_k(x)}x<k\)

枚举 \(m=\frac{R_k(x)}x\),计算合法的 \(x\) 的数量

先考虑计算 \(|x|<|n|\) 的方案数

\(f_{i,a,b,0/1}\) 表示长度为 \(i\),乘以 \(m\) 后,最高位向下一位进位 \(a\),最低位的上一位向其进位 \(b\),当前这一段是否不强制要求无前导 \(0\) 的方案数

显然

\[f_{0,a,b,c}=[a=b]\\ f_{1,a,b,c}=\sum_{i=c}^{k-1}[i+ak=im+b]\\ \]

考虑一般情况下的转移

枚举最低位的值 \(j\),则乘以 \(m\) 得到 \(mj+b\),进位后剩余 \((mj+b)\bmod k\),从而最高位 \(i=(mj+b)\bmod k\)(因为翻转),若 \(i<c\) 则违背限制直接跳过,否则设转移到的状态为 \(f_{l-2,x,y,0}\),显然有 \(im+x=ka+j,jm+b=i+yk\),从而 \(x=ka+j-im\)\(y=\frac{jm+b-i}k\),若 \(x,y\) 都在 \([0,k)\) 中则可以转移

为了加速,可以预处理每个 \((a,b,c)\) 的后继状态的集合,实际转移较少

这部分对答案的贡献显然为 \(\sum_{l=1}^{|n|-1} f_{l,0,0,1}\),记忆化搜索即可

然后考虑计算 \(|x|=|n|\) 的方案数

\(g_{l,a,b,f,r}\) 表示考虑正中间长度 \(l\) 的一段,,乘以 \(m\) 后,最高位向下一位进位 \(a\),最低位的上一位向其进位 \(b\),当前段以前的部分是否紧贴上界,当前段以后的部分是否超过上界,该情况下的方案数

显然对答案的贡献为 \(g_{|n|,0,0,0,0}\)

\(n_i\) 表示 \(n\) 从高到低第 \(i\) 位(从 \(0\) 开始),显然

\[g_{l,a,b,0,r}=f_{l,a,b,0}\\ g_{0,a,b,f,r}=[a=b\land \lnot r]\\ \]

\([lm,rm]=\left[[l=|n|],n_{\left\lfloor\frac{|n|-l}2\right\rfloor}\right]\) 为最高位的取值范围,则

\[f_{1,a,b,f,r}=\sum_{i=lm}^{rm}[i+a\times k=i\times m+b\land(\lnot r\lor i<rm)] \]

\(rrm=s_{|n|-1-\left\lfloor\frac{|n|-l}2\right\rfloor}\) 为最低位的限制,枚举 \(lm\le i\le rm\) 为当前最高位,\(0\le j<k\) 为当前最低位,与 \(f\) 类似地 \(x=ka+j-im\)\(y=\frac{jm+b-i}k\)(若 \(y\) 不是整数或 \(x,y\) 超出 \([0,k)\) 则直接返回),令 \(g_{l,a,b,f,r}\) 加上 \(g_{l-2,x,y,[i<rm],[j>rrm]+[j=rrm]r}\)

总时间复杂度 \(O(k^4+k^4|n|)\),其中后一项常数极小

代码

比赛结果

\(100+76+68+8\)\(\text{rk}28\)

posted @ 2025-08-29 19:03  Hstry  阅读(24)  评论(0)    收藏  举报