2025.9.9 NOIP 模拟赛 题解
T1 P130006 阿蛮
题意
给定 \(n,m\),初始有 \(a_{1\sim n}=1\),\(m\) 次操作,每次操作以 \(\frac{a_i}{\sum a}\) 的概率选择 \(a_i\) 加一,并将 \(\max(0,2a_1-\sum a)\) 计入贡献,求最终贡献的期望,\(n,m\le10^6\),多测 \(T\le10^6,\sum n+\sum m\le10^7\)
分析
令 \(f_{i,j}\) 表示 \(\sum a=i\) 时,\(\sum_{i=2}^n a_i=j\) 的概率
显然 \(f_{n,n-1}=1\),转移为 \(f_{s+1,x+1}\gets \frac xs f_{s,x}\),\(f_{s+1,x}\gets \frac{s-x}s f_{s,x}\)
答案为
发现 \(f_{i,j}=\dfrac{\binom{j-1}{n-2}}{\binom{i-1}{n-1}}\),因此答案为
单次询问容易做到 \(O(n+m)\),总时间复杂度 \(O(\sum (n+m))\)
T2 P130007 菟园
题意
一个字符串初始为空,\(n\) 次操作,每次在末尾新增一个字符,或给定一个长度 \(l\) 求出字符串长度为 \(l\) 的前缀的出现次数,部分数据点强制在线,\(n\le8\times10^5\),保证第一个操作一定为追加
分析
建立 \(\text{fail}\) 树,转化为每次加入一个叶子,或查询子树大小
显然可以用维护子树大小的 \(\text{LCT}\) 做到大常数 \(O(n\log n)\)
存在一个小常数 \(O(n\sqrt n)\) 的算法:类似 P3203 [HNOI2010] 弹飞绵羊,序列分块,每个点维护它跳到前一个块所需的最小步数和跳到的位置
T3 P130008 玉真
题意
给定 \(k\),令 \(s_k(n)\) 为 \(k\) 进制下 \(n\) 的数位和 \(\bmod k\),令 \(w(l,r)\) 为 \(s_k\) 的区间 \([l,r]\) 拼成的字符串,给定 \(l_{1\sim n},r_{1\sim n}\),令 \(S=w(l_1,r_1)+w(l_2,r_2)+\cdots+w(l_n,r_n)\),给定 \(q\) 个字符串 \(p_{1\sim q}\),对于每个 \(p_i\) 求出在 \(S\) 中的出现次数,\(n,q\le10^5,\sum|p_i|\le2\times10^5,1\le l_i\le r_i\le10^9,|S|\le10^{14}2\le k\le 5\)
分析
QOJ #6842. Popcount Words 在三四五进制下的扩展
先用 \(p_{1\sim q}\) 建立 \(\text{ACAM}\),此时需要用 \(S\) 在自动机上跑,发现时间复杂度难以接受
每个 \(w(l,r)\) 可以拆分为 \(O(k\log_k V)\) 个 \((l,o)\) 拼接,其中 \((l,o)_i=(s_k(i)+o)\bmod k\mid 0\le i<2^l\),整个 \(S\) 可以拆分为 \(O(nk\log_k V)\) 个
对于 \(\text{ACAM}\) 上每个点预处理从它出发跳 \((l,o)\mid l\le O(\log_k V),0\le o<k\) 后到达的点,用 \(O(nk\log_k V)\) 个二元组在 \(\text{ACAM}\) 上跳,每个点保存它作为起点被 \((l,o)\) 覆盖的次数
然后在 \(\text{ST}\) 表状物上下放,求出每个点被覆盖的次数
总时间复杂度 \(O(\sum|p_i|k^2\log_kV+nk\log_kV)\)
T4 P130009 乘烟
题意
给定一棵 \(2n\) 个点的树,保证每个点度数 \(\le n\),用 \(n+1\) 种颜色为其染色,满足每种颜色至多出现两次,且每条边两个端点颜色不同,且不存在两条边使得两个端点染色情况相同,可证该情况下必然存在解,给出一种染色方案,\(3\le n\le20000\),多测 \(\sum n\le2\times10^5\)
分析
先考虑存在一个点度数等于 \(n\) 的情况
显然最优方案为令该点为根,每次选择一个与它相邻的叶子和一个不与它相邻的叶子,给两者染上相同的颜色并删去,直到只剩下两个结点时分别染上最后两种颜色,可证必然合法
然后考虑一般情况,假定此时所有点度数都 \(<n\)
定义四元组 \((a,b,c,d)\) 合法当且仅当 \(a\) 为叶子且 \(a-b,b-c,c-d\) 有边,且 \(|N(b)|+|N(d)|<n+2\)
对于一组合法的四元组 \((a,b,c,d)\),显然可以将 \(d\) 除了 \(c\) 以外的邻居连到 \(b\) 上然后删除 \(a\) 和 \(d\)(同时给两者染上相同颜色),修改后树仍然满足题目条件,且最大度数不降,因此操作若干次后会出现存在一个点度数等于剩余点数的一半的情况
考虑如何找到合法四元组
考虑两个四元组 \((a,b,c,d)\) 和 \((x,y,z,w)\),若 \(b,d,y,w\) 两两不同,则 \(|N(b)|+|N(d)|+|N(y)|+|N(w)|\le 2n-4+6\),因此必然有 \(|N(b)|+|N(d)|<n+2\) 或 \(|N(y)|+|N(w)|<n+2\),即至少有一个合法
选择树上一个叶子 \(x\),设与它相邻的点为 \(u\),选择一个相邻点不是 \(u\) 的叶子 \(y\),则 \(\text{dis}(x,y)>2\)
取出路径 \(x-y\) 上的点,设为 \(p_{1\sim m}\)(显然 \(m\ge 4\))
取出 \(p_{1\sim 4}\) 和 \(p_{m\sim m-3}\),若两个四元组中至少一个合法,对它操作即可
若两者都不合法,则将 \(x\) 和 \(y\) 染上相同颜色并删去即可
直接实现为 \(\~O(\sum n^2)\) 的,容易用 \(\text{LCT}\) 或 \(\text{DSU}\) 优化到 \(O(\sum n\log^{O(1)} n)\)
比赛结果
\(80+70+100\),\(\text{rk}8\)

浙公网安备 33010602011771号