2025.2.14 NOI 模拟赛 题解
T1 AT_arc185_d [ARC185D] Random Walk on Tree
题意
有一颗 \(n\times m+1\) 个点的树,点 \(i\)(\(1\le i\le n\times m\))连向 \(\max(0,i-n)\),从 \(0\) 开始随机游走,求遍历所有节点的期望时间,\(n,m\le2\times10^5\)
分析
树的形态为 \(0\) 下面挂了 \(n\) 条 \(m\) 个点的链
令 \(f_i\) 表示已经遍历了 \(i\) 条链,现在在节点 \(0\),从当前状态开始到 遍历 \(n\) 条链且回到节点 \(0\) 的期望时间
令 \(E\) 为从 \(0\) 走到一条链的第一个点,然后在这条链中随机游走,第一次回到 \(0\) 的时间
令 \(P\) 表示在该过程中到达过链底(即遍历整条链)的概率
令 \(P'_i=\frac{n-i}n\times P\) 表示已经遍历了 \(i\) 条链的情况下,从 \(0\) 出发随机选择下一条链,恰好遍历了一条新的链的概率
令 \(e'\) 为长为 \(m+1\) 的链上,从一端随机游走到另一端的概率
则 \(f\) 的转移为
化简为
答案为
问题转化为求 \(P,E,e'\)
先考虑 \(P\),其为马尔科夫链问题,相当于长为 \(m+1\) 的链,节点分别为 \(0\sim m\),从 \(0\) 开始,第一步强制向右,第一次回到 \(0\) 之前到达过 \(m\) 的概率
令 \(t_i\) 表示从 \(i\) 出发随机游走,回到 \(0\) 之前到达过 \(m\) 的概率
则 \(P=t_1\),\(t_0=0\),\(t_m=1\),\(t_i=\frac{t_{i-1}+t_{i+1}}2\),显然为等差数列,因此 \(t_i=\frac im\),因此 \(P=\frac 1m\)
然后考虑 \(E\) 和 \(e'\)
令 \(e_i\) 表示长为 \(m+1\) 的链编号 \(0\sim m\),从 \(i\) 开始随机游走,第一次到达 \(0\) 的期望步数
则 \(E=e_1+1,e'=e_m\),\(e_0=0,e_m=e_{m-1}+1\)
转移为
化为
令 \(x_i=e_i-e_{i-1}\),则 \(x_i=2+x_{i+1}\),\(x_m=1\),因此 \(x_i=2(m-i)+1\)
因此 \(e_i-e_{i-1}=2+x_{i+1}=2(m-i-1)+1=2(m-i)-1\)
可得 \(e_i=\sum_{j=1}^i (2(m-j)-1)=2mi-i^2\)
因此 \(E=2m-1+1=2m\),\(e'=e_m=m^2\)
带入之前的式子,可得答案为
\(O(n)\) 递推出 \(1\sim n\) 的逆元后直接计算即可,时间复杂度 \(O(n)\),瓶颈在于计算 \(\sum_{i=1}^n \frac1i\)
可以通过筛优化到 \(O\left(\dfrac{n^{3/4}}{\log n}\right)\)
T2 P3824 [NOI2017] 泳池
题意
一个 \(1001\times n\) 的矩阵,每个位置 \(p\) 的概率为 \(0\),\(1-p\) 的概率为 \(1\),定义矩阵的面积为与其第一行有交的最大全 \(0\) 矩阵的面积,求矩阵的面积恰好为 \(k\) 的概率,\(n\le10^9,k\le1000\)
分析
答案等于 矩阵的面积 \(\le k\) 的概率 减去 矩阵的面积 \(\le k-1\) 的概率,只考虑前者,后者实现相同
对于某种可能的矩阵,令 \(a_i\) 为满足第 \(i\) 列前 \(a_i\) 行全为 \(0\) 的最大值,则矩阵的面积为 \(\max_{1\le l\le r\le n}((r-l+1)\min(a[l:r]))\)
令 \(dp_{w,h}\) 表示 \(w\) 列的矩阵的每个 \(a_i\) 都 \(\ge h\),且矩阵的面积 \(\le k\) 的概率
则 \(dp_{0,\ast}=1\)
转移时枚举第一个最小的 \(a_i\) 的位置
答案为 \(dp_{n+1,0}\)
只要计算 \(wh\le k\) 的 \(dp_{w,h}\) 即可,直接 \(dp\) 为 \(O(n^2)\) 的(此时假设 \(n,k\) 同级)
显然合法矩阵中,不可能有连续 \(k+1\) 个及以上的 \(a_i\) 为正整数
因此先处理出 \(w\le k\) 的 \(dp_{w,h}\),然后考虑每次加入一段非 \(0\) 的
令 \(g_w\) 表示宽为 \(w\),最后一列的 \(a_w=0\),矩阵面积不超过 \(k\) 的概率
显然 \(g_0=1\),要求的为 \(g_{n+1}\)
转移为
这是常系数齐次线性递推,令 \([x^{k+1}]f(x)=1\),\([x^{k+1-i}]f(x)=(1-p){dp}_{i-1,1}\),令 \(g(x)=x^n\bmod f(x)\),预处理 \(g_{0\sim k}\),则答案为 \(\sum_{i=0}^k g_i[x^i]g(x)\)
时间复杂度 \(O(k^2\log n)\),可优化到 \(O(k\log k\log n)\)
代码(赛时模数改为 \(10^9+7\),其余不变)
T3 yukicoder No.2023 Tiling is Fun 加强版
题意
有一个六边形,六个顶点依次为 \((a,0),(a+b,0),(a+b,c),(b,a+c),(0,a+c),(0,a)\),有三种图形,第一个为边长 \(1\) 的正方形,第二个和第三个底和高为 \(1\) 右下角为 \(45^\circ\) 的平行四边形,第二个底边和 \(x\) 轴平行,第三个高和 \(x\) 轴平行,三者各自有无限个,要用它们恰好覆盖六边形(只能平移),求方案数,\(a,b,c\le5\times10^5\)
六边形:
__
| \
| |
| | c
\__|
a b
三种图形:
_ _ |\
|_| \_\ \|
分析
先考虑 \(a=1\) 的情况,显然对于一种合法的铺设情况,其中的二类和三类图形组成一条左下到右上的路径,仅考虑其下边沿,则为 \((a,0)\) 到 \((a+b,c)\) 的路径,一共 \(\binom{b+c}c\) 种可能
然后考虑 \(a\ne 1\) 的情况
此时一共 \(a\) 条路径,第 \(i\) 条起点为 \((i,a-i)\),终点为 \((b+i,c+a-i)\),要求两两不交
令 \([f(i,j)]\) 表示位置 \((i,j)\) 为 \(f(i,j)\) 的 \(a\times a\) 的矩阵(\(1\le i,j\le a\))
根据 \(LGV\) 引理,答案为
暴力计算总时间复杂度为 \(O(a^3+b+c)\) ,需要化简
重复 \(a-1\) 次以下过程:第 \(i\) 次中,令第 \(a\) 行加上第 \(a-1\) 行,第 \(a-1\) 行加上第 \(a-2\) 行,以此类推,最后为第 \(i+1\) 行加上第 \(i\) 行
这样操作后,原矩阵变为
转化为下降幂
每行将 \((b+j-1)!\) 提到前面
其中 \((b+c+i-1)^{\underline{b+j-1}}=(b+c+i-1)^{\underline b}(c+i-1)^{\underline {j-1}}\),再将 \((b+c+i-1)^{\underline b}\) 提到前面,则化为
右侧为范德蒙德矩阵,因此可化简为
化简得
拆开下降幂得
预处理后计算即可
时间复杂度 \(O(a+b+c)\)
代码:
#include <bits/stdc++.h>
using namespace std;
constexpr int M = 998244353;
int mul(int x, int y){return static_cast<long long>(x) * y % M;} void smul(int &x, int y){x = mul(x, y);}
template <typename... Arg> void smul(int &x, int y, int z, Arg... arg){smul(x, y); smul(x, z, arg...);}
int a, b, c, rs = 1;
int fc[1500010], ivfc[1500010], iv[1500010];
int main(){
freopen("c.in", "r", stdin);
freopen("c.out", "w", stdout);
cin >> a >> b >> c;
fc[0] = fc[1] = ivfc[0] = ivfc[1] = iv[1] = 1;
for (int i = 2; i <= a + b + c; ++i)fc[i] = mul(fc[i - 1], i), ivfc[i] = mul(ivfc[i - 1], iv[i] = mul(iv[M % i], M - M / i));
for (int i = 0; i < a; ++i)smul(rs, fc[b + c + i], fc[i], ivfc[c + i], ivfc[b + i]);
cout << rs << endl;
return 0;
}
/*
rs = \prod_{i=0}^{a-1} \frac{(b+c+i)^{\underline{b}}}{(b+i)^{\underline{b}}}
*/
/*
1 1 1 2
1 1 496715 496716
1 1 498537 498538
1 947 951 651450559
2 499368 498416 181080685
493408 490933 498071 96174609
491056 232630 224660 812606967
*/
比赛结果
有事没有参加,最高分 \(100+100+72\)

浙公网安备 33010602011771号