2023.07.16 高质量 NOIP 模拟赛题解

发布时间 2023-07-16 16:22:55作者: CSP_Sept

HDU5719 Arrange

【模拟】

给定数列 \(B_n,C_n\),求出满足

\[B_i=\min_{j=1}^i\{A_j\},\quad C_i=\max_{j=1}^i\{A_j\} \]

排列 \(A\) 的数量。

维护每个位置可能的数字数量,然后乘法原理即可。

代码:http://acm.hdu.edu.cn/viewcode.php?rid=38654445

HDU5807 Keep In Touch

【分段 dp】

\(n\) 个城市,编号依次为 \(1\)\(n\),同时有 \(m\) 条单向道路连接着这些城市,其中第 \(i\) 条道路的起点为 \(u_i\)​​,终点为 \(v_i\)\(u_i<v_i\))。

一共有 \(3\) 名成员将要执行 \(q\) 次任务。
<
在每次任务中,三人可能会处于三个不同的城市,他们互相之间通过对讲机保持联络。编号为 \(i\) 的城市的无线电频为 \(w_i\)​​,如果两个城市的无线电频差值的绝对值不超过 \(K\),那么无线电就可以接通。三名成员每个时刻必须要选择一条道路,走到下一个城市,每条道路都只需要花费 \(1\) 个单位时间。

他们可以选择在任意城市终止任务,甚至可以在起点就终止任务,但不允许在道路上终止任务。现在他们想知道,对于每次任务,给定三个人的起始位置,有多少种可能的合法行动方案,使得行动过程中任意在城市的时刻,他们都可以两两联络?

两个方案被视作不同当且仅当至少存在一个人在某一时刻所在的城市不同。

注意:\(3\) 名成员必须同时结束任务。

对于所有数据,保证:\(1\le T\le10\)\(1\le n\le50\)\(1\le m\le \dfrac{n\cdot(n-1)}2\)\(0\le k\le10^9\)\(1\le q\le 125000\)\(1 \le w_i\le10^9\)\(1\le u_i<v_i\le n\)\(1\le x,y,z\le n\)

\(f[i][j][k][p]\) 表示三个人分别在 \(i,j,k\) 且此时的启动状态为 \(p\) 时的方案数。直接 dp 即可。复杂度 \(O(n^4)\)

代码:http://acm.hdu.edu.cn/viewcode.php?rid=38654447

HDU5597 GTW likes function

【数论】

已知 \(f_0(x)=\sum\limits_{k=0}^x(-1)^k\cdot 2^{2x-2k}\cdot\text C_{2x-k+1}^k\),且对于 \(n\ge1\),有 \(f_n(x)=f_0(f_{n-1}(x))\)

给定 \(n,x\ (1\le n,x\le 10^{12})\),求 \(\varphi(f_n(x))\)

建议改为:【模板】求 \(\varphi(x)\)

先证 \(f(x)=x+1\)(这里 \(f\) 默认指 \(f_0\)):

【证明】 首先,

\[\begin{aligned} f(n)&=\sum\limits_{k=0}^n(-1)^k\cdot 2^{2n-2k}\cdot\text C_{2n-k+1}^k\\&=\sum\limits_{k=0}^n(-1)^k\cdot 2^{2n-2k}\cdot\left(\text C_{2n-k}^k+\text C_{2n-k}^{k-1}\right)\\&=\sum\limits_{k=0}^n(-1)^k\cdot 2^{2n-2k}\cdot\text C_{2n-k}^k-\sum\limits_{k=0}^{n-1}(-1)^k\cdot 2^{2(n-1)-2k}\cdot\text C_{2(n-1)-k+1}^{k}\\&=\sum\limits_{k=0}^n(-1)^k\cdot 2^{2n-2k}\cdot\text C_{2n-k}^k-f(n-1)\\&=g(n)-f(n-1) \end{aligned} \]

另外,下面的关键问题是研究 \(g(n)\),即

\[\begin{aligned} g(n)&=2^{2n}+\sum\limits_{k=1}^{n-1}(-1)^k\cdot 2^{2n-2k}\cdot\left(\text C_{2n-k-1}^k+\text C_{2n-k-1}^{k-1}\right)+(-1)^n\\&=\sum_{k=0}^{n-1}(-1)^k\cdot 2^{2n-2k}\cdot\text C_{2n-k-1}^k+\sum_{k=1}^n(-1)^k\cdot 2^{2n-2k}\cdot\text C_{2n-k-1}^{k-1}\\&=4\sum_{k=0}^{n-1}(-1)^k\cdot 2^{2(n-1)-2k}\cdot\text C_{2n-k-1}^k-\sum_{k=0}^{n-1}(-1)^k\cdot 2^{2(n-1)-2k}\cdot\text C_{2(n-1)-k}^{k}\\&=4f(n-1)-g(n-1) \end{aligned} \]

联立上述两式,易得 \(f(x)-f(x-1)=C\)(常数)。

考虑到 \(f(0)=1,f(1)=2\),所以 \(f(x)=x+1\),证毕。

所以 \(f_n(x)=x+n+1\)

HDU5669 Road

\(n\) 个顶点,有 \(m\) 个五元组 \((a,b,c,d,w)\),每个五元组表示编号在区间 \([a,b]\) 之中的每一个顶点和编号在区间 \([c,d]\) 之中的每一个顶点,都有一条长度为 \(w\) 的边。现在,可以选择 \(k\) 条边,将其边长置为 \(0\),求 \(1\)\(n\) 的最短路。

对于所有数据,保证:\(1\le T\le10\)\(1\le n\le5\times10^4\)\(1\le m\le10^4\)\(0\le k\le10\)\(1\le w\le10^3\)

暴力显然直接每次 \(O(n^2)\) ​的连边,最后跑一次分层图最短路即可。

然后我们考虑优化一下这个连边的过程,利用线段树来维护整个图,连边时候找到对应区间,把线段树的节点之间连边,然后再跑分层图最短路。

为解决边的规模,开两棵线段树,连边时候新建一个中间节点,在对应区间的节点和中间节点之间连边。最后跑一下分层图最短路,复杂度 \(O(m\log^2n)\)