【省选模拟】数学专题

1.3

young

先把期望换成求所有情况的和

一个套路的想法是设 \(f(n,m)\) 表示 \(n\) 个点权值范围 \(2^m\) 的最小生成树权值和,记 \(s\) 为二进制第 \(m\) 位为 \(0\) 的点集,\(t\)\(m\) 位为 \(1\) 的,将权值和分为三部分:\(s,t\) 之间连边和 \(s,t\) 各自内部

\(g(s,t,m)\) 为使点集 \(s,t\) 联通的权值和,\(h(s,t,m,k)\)\(s,t\) 之间最小边边权 \(\ge k\) 的方案数,则有 \(g(s,t,m)=\sum_{i=1}^{2^{m}-1}h(s,t,m,i)\)(最小值转方案数的经典套路,见过好多次但总想不起来。。。)

考虑转移 \(f\),先枚举 \(|s|=i\)
\(|s|=0\)\(|t|=0\),边权第 \(m\) 位一定是 \(0\);否则使 \(s,t\) 联通至少会有 \(2^{m-1}\times2^{(m-1)n}\) 代价(所有点低于 \(m\) 位的权值随便选)。再加上更低位的权值 \(g(s,t,m-1)\)
\(s\) 内部的边权和为 \(f(i,m-1)\times2^{(m-1)(n-i)}\)\(s\) 内部连边的第 \(m\) 位一定是 \(0\),乘 \(2\) 的幂是因为 \(s,t\) 是独立计算的,所有可能的 \(t\) 集都会让 \(s\) 集贡献 \(f(i,m-1)\)\(t\) 同理

接着考虑转移 \(h\),枚举 \(s,t\) 中第 \(m\) 位为 \(0\) 的点数 \(i,j\),根据 \(k\) 的第 \(m\) 位分类讨论:
\(k\) 的第 \(m\)\(0\)\((i,j)\)\((|s|-i,|t|-j)\) 的方案互不影响,直接把两部分乘起来
否则因为选的是最小边,一定只有 \(i=0,j=|t|\)\(i=|s|,j=0\) 两种情况,结果为 \(2h(s,t,m-1,k\oplus2^{m-1})\)

整理一下:

\[ans=\frac{f(n,m)}{2^{mn}} \\ f(n,m)=\sum_{i=0}^{n}{n\choose i}(2^{(n-i)(m-1)}f(i,m-1)+2^{i(m-1)}f(n-i,m-1)+g(i,n-i,m-1)+[|s|>0][|t|>0]2^{(m-1)(n+1)}) \\ h(s,t,m,k)=\sum_{i=0}^{s}\sum_{j=0}^{t}{s\choose i}{t\choose j}h(i,j,m-1,k)h(s-i,t-j,m-1,k),\ k\ 第\ m\ 位为\ 0 \]

注意一下边界,对于 \(f,g\),一边点数为 \(0\) 或权值范围为 \(0\) 时显然是 \(0\),但对于 \(h\),认为 \(m=0\) 时有一种方案,一边点数为 \(0\) 时不可能联通(权值为 \(\inf\)),另一边可以任选

时间复杂度 \(O(n^{4}2^{m})\),常数较小,实现上采用记搜即可

code
const int N = 55;
int n,m;
LL pw[455],C[N][N];
gp_hash_table<int,int> f[N],g[N][N],h[N][N][10];

LL H(int s,int t,int m,int k) {
	if( s > t ) swap(s,t);
	if( !m ) return 1;
	if( !s ) return pw[m*t];
	if( h[s][t][m].find(k) != h[s][t][m].end() ) return h[s][t][m][k];
	if( k>>m-1 & 1 ) return h[s][t][m][k] = 2 * H(s,t,m-1,k^(1<<m-1)) %mod;
	LL res = 0;
	For(i,0,s) For(j,0,t)
		(res += C[s][i] * C[t][j] %mod * H(i,j,m-1,k) %mod * H(s-i,t-j,m-1,k)) %=mod;
	return h[s][t][m][k] = res;
}
LL G(int s,int t,int m) {
	if( s > t ) swap(s,t);
	if( !s || !m ) return 0;
	if( g[s][t].find(m) != g[s][t].end() ) return g[s][t][m];
	LL res = 0;
	Rep(i,1,endi, endi = 1<<m) ckadd(res,H(s,t,m,i));
	return g[s][t][m] = res;
}
LL F(int n,int m) {
	if( n <= 1 || !m ) return 0;
	if( f[n].find(m) != f[n].end() ) return f[n][m];
	LL res = 0;
	For(i,0,n)
		(res += C[n][i] * (pw[(n-i)*(m-1)]*F(i,m-1)%mod + pw[i*(m-1)]*F(n-i,m-1)%mod + (i&&n-i)*pw[(m-1)*(n+1)]+G(i,n-i,m-1))) %=mod;
	return f[n][m] = res;
}

signed main() {
	pw[0] = 1; Rep(i,1,455) pw[i] = pw[i-1] * 2 %mod;
	Rep(i,0,N) For(j,C[i][0]=1,i) C[i][j] = (C[i-1][j-1] + C[i-1][j]) %mod;
	read(n,m);
	write(F(n,m)*Pow(pw[n*m])%mod);
	return ocl();
}

Simple

其实是套路题,赛时最后才会做没 rush 完有点难受

考虑「钦定」的本质就是 \(X\) 在它所有循环同构中严格最小,「严格」意味着不能有 \(<n\) 的循环节,除去这些数。剩下的数旋转 \(0\)\(n-1\) 次都不相同,这 \(n\) 个数字中只有字典序最小的合法,因此答案为

\[\sum_{i=1}^{n}i^{2}\frac{f(i)}{i} \]

其中 \(f(i)\) 表示 \(i\) 位数字不循环的数字个数,设 \(g(i)\)\(i\) 为数字个数,可以通过 \(g(i)=10^{i}=\sum_{d\mid i}f(d)\) 反演得到

然后莫比乌斯反演一下,构造 \((id\cdot\mu)*id=I\) 杜教筛即可

1.6

猜拳游戏

带平局的情况可以看做一直打到分出胜负为止,因此每轮胜率为 \(\frac{w}{w+l}\)

\(a[i]\) 为净胜 \(i\) 轮时的游戏胜率,如果求出每轮胜率,有 \(a[m1]=1,a[-m_{2}]=0,a[i]=\frac{w}{w+l}a[i+1]+(1-\frac{w}{w+l})a[i-1]\),高斯消元即可

\(\max\frac{w}{w+l}\),等价于求 \(\max\frac{w}{l}\),考虑 \(01\) 分数规划。

现在要判断 \(w-l\times mid\ge0\) 是否合法,可以设 \(f[i,j]\) 为第 \(i\) 局前净胜 \(j\) 局的最大得分,胜一局记 \(1\) 分,输一局记 \(-mid\) 分,枚举出剪刀/石头/布转移,倒序 DP(因为 \(f[n+1,j]\) 的值显然),判断 \(f[1,0]\) 是否 \(\ge0\) 即可

B君的回忆

显然可以将内层的 \(g\) 对当前层的循环节取模,从而递归求解,关键在于求循环节

不难发现 \(g\) 是类斐波那契数列(ys 声称 \(g(n)=fib_{2i}(b)-fib_{2i-2}(a)\)),因此 \(g\mod p\) 的循环节大约在 \(3p\)。而循环节的本质是转移矩阵的若干次幂等于单位矩阵,可以 BSGS 求,直接实现大约是 \((2^{3}Tk\sqrt{p})\),考虑优化

  1. 如果 \(\gcd(a,b)=1\)\(len(a,b)=\text{lcm}(len(a),len(b))\)\(len(p)\) 为模 \(p\) 下循环节),可以将模数分解质因数后记忆化
  2. BSGS 时先判一下 \(p-1,p+1\) 是否是解(大概率是)
  3. 矩阵只有 \(2\times2\),相关运算都可以循环展开

还有两个不会证的结论:

  1. 对于质数 \(p\)\(len(p^{c})=len(p)p^{c-1}\)
  2. 递归常数次后就会出现 \(len(p)=p\)

采用前 \(3\) 个优化就可以做到最大点 \(<50\)ms

小H爱染色

枚举第一个被染的球,则答案为 \(\displaystyle\sum_{i=1}^{n}F(i-1)(2{n-i\choose m-1}{n-i\choose m}+{n-i\choose m-1}^{2})\),这是个 \(3m+1\) 次多项式,可以做到 \(O(m^{2})\) 插值,但没有优化空间

一个比较神奇的做法是把 \(F(x)\) 展开为 \(\sum_{i=0}^{m}f_{i}x^{i}\)

\(G(i)\) 为给 \(i\) 个球染两次色,每次染 \(m\) 个,第一个必须染的方案数,则有 \(\displaystyle G(i)=\sum_{j=m}^{2m}{i\choose j}{j\choose m}{m\choose 2m-j}\)(枚举染了色的球数 \(j\)\({j\choose m}{m\choose 2m-j}\) 表示第一次随便染 \(m\) 个,第二次染 \(2m-j\) 个染过的)。则答案为

\[\sum_{i=0}^{n-1}F(i)G(n-i) \\ =\sum_{i=0}^{n-1}\sum_{j=0}^{m}f_{j}i^{j}\sum_{k=m}^{2m}{n-i\choose k}{k\choose m}{m\choose 2m-k} \\ \]

\(i^{j}\) 用第二类斯特林数展开

\[=\sum_{i=0}^{n-1}\sum_{j=0}^{m}f_{j}\sum_{l=0}^{j}{j\brace l}{i\choose l}l!\sum_{k=m}^{2m}{n-i\choose k}{k\choose m}{m\choose 2m-k} \]

\(\sum_{i=0}^{n-1}{i\choose l}{n-i\choose k}\) 其实就是 \({n\choose k+l}\)(从 \(n\) 个球中选 \(l+k\) 个染,\(i\) 是后面 \(k\) 个球的第一个),这样就不需要枚举 \(i\) 了(此处存疑。可以确定 \(\sum{i\choose a}{n-i\choose b}={n+1\choose a+b+1}\) 是对的,相当于新增一个球作为分界点)

\[=\sum_{j=0}^{m}\sum_{k=m}^{2m}\sum_{l=0}^{j}{n\choose k+l}l!f_{j}{k\choose m}{m\choose 2m-k}{j\brace l} \]

再把 \({j\brace l}\) 展开

\[=\sum_{j=0}^{m}\sum_{k=m}^{2m}\sum_{l=0}^{j}{n\choose k+l}l!f_{j}{k\choose m}{m\choose 2m-k}\frac{1}{l!}\sum_{t=0}^{l}(-1)^{t}{l\choose t}(l-t)^{j} \\ =\sum_{k=m}^{2m}\sum_{l=0}^{m}{n\choose k+l}{k\choose m}{m\choose 2m-k}\sum_{t=0}^{l}(-1)^{t}{l\choose t}F(l-t) \]

先对最后一个 \(\sum\) 卷一次,然后和只与 \(k\) 相关的卷,最后枚举 \(k+l\) 求和,有点卡常(也许是我 NTT 板子太慢了)

1.7

宇宙序列

异或卷积具有结合律,可以倍增,时间复杂度 \(O(pn2^{n})\)

根据 DFT 性质,可以只求点值和,然后做一次 FWT,问题变为求 \(\sum_{i=0}^{p}j^{2^{i}}\)

发现模数很小,可以 \(mod^{2}\)\(2^{i}\) 的循环节

正解是倍增。设 \(f[i,j]=\sum_{k=0}^{2^{i}-1}j^{2^{k}}\),显然有 \(f[i,j]=f[i-1,j]+f[i-1,j^{2^{2^{i-1}}}]\)
个人感觉答案不太好统计,解释一下。由于 \(f[i,j]\) 取不到 \(2^{i}\),先将 \(p\leftarrow p+1\),计算时不取 \(p\)。然后类似快速幂扫每一位,对于为 \(1\) 的位(第 \(i\) 位,记 \(s[i]=(2^{i}-1)\oplus p\)\(\oplus\) 表示 &)累加 \(\displaystyle f[i,x^{2^{s[i]}}]\)\(x\) 需要次幂是因为这一位需要累加的贡献是 \(\sum_{j=s[i]}^{s[i]+2^{i}-1}x^{2^{j}}\),而 \(f[i,x]\) 是从 \(x^{2^{0}}\) 开始的

时间复杂度 \(O(mod\log p+n2^{n})\)

exp

对于区间 \([l,r]\),找出其中一个 . 的下标 \(k\),那么如果 \(k\) 是该区间中最后一个被选的,\([l,k],[k+1,r]\) 互不影响,可以据此 DP。

\(f[l,r]\) 为区间 \([l,r]\)\(s_{r}=\) .,消掉 \([l,r)\) 中所有 . 的期望(\(r\) 未消),\(g[l,r]\) 为概率,\(p(l,r,k)\)\(s_{k}=s_{r}=\) .,消掉 \([l,r)\).\(s_k\) 为最后一个消(\(r\) 未消)的概率,则有

\[g[l,r]=\sum_{i=l}^{r-1}[s_{i}=\text{'.'}]p(l,r,i) \]

即枚举 \([l,r)\) 中最后一个被消的是哪个

\[p(l,r,k)={lc+rc\choose lc}(\frac{k-l+1}{r-l+1})^{lc}g[l,k](\frac{r-k}{r-l+1})^{rc}g[k+1,r]\frac{k-l+1}{r-l+1} \]

其中 \(lc,rc\) 表示 \([l,k),(k,r)\). 的个数。组合数是确定这 \(lc+rc\). 消的顺序,\((\frac{k-l+1}{r-l+1})^{lc}\)\(lc\) 次选中 \([l,k]\) 的概率,再乘上这 \(lc\) 次恰好消完 \([l,k)\) 的概率 \(g[l,k]\),最后一次消掉 \(k\) 的概率为 \(\frac{k-l+1}{r-l+1}\)

\[f[l,r]=\sum_{i=l}^{r-1}[s_{i}=\text{'.'}]\frac{p(l,r,i)}{g[l,r]}(f[l,i]+f[i+1,r]+\frac{i-l}{2}) \]

\(\frac{p(l,r,i)}{g[l,r]}\) 本质是加权平均,\(\frac{i-l}{2}\) 是最后一次消掉 \(i\) 对期望的贡献。(设 \(E(i)\)\([1,i]\) 中仅有 \(i\) 位置为 .,一次操作消掉 \(i\) 的期望,则有 \(E(i)=\frac{1}{i}\sum_{j=0}^{i-1}=\frac{i-1}{2}\),代入 \(i-l+1\) 可得)

\[ans=\frac{n-1}{2}+\sum_{i=1}^{n}g[i,i+n-1]\times f[i,i+n-1] \]

破环成链后枚举最后一个被消掉的位置 \(i+n-1\),同样需要加上 \(E(n)\)(注意特判全是 X 的情况)

实现上组合数、次幂直接用 double 算即可,玄学原因不会掉太多精度(但一定不能用 <cmath> 库的 pow,精度常数都爆炸)

1.8

传统题

\(f(ans=i)\) 为最长连续相同子段长度 \(=i\) 的方案数,则答案为

\[\sum_{i=1}^{n}i\times f(ans=i)=\sum_{i=1}^{n}m^{n}-f(ans<i) \]

考虑计算 \(\sum_{i=1}^{n-1}f(ans\le i)\)。枚举连续相同子段数 \(j\),那么要求这 \(j\) 段中相邻两端颜色不同,每段长 \(\le i\),总长为 \(n\)。后两个条件等价于 \(\sum x_{j}=n,\forall x_{j}\le i\),是经典容斥

\[=\sum_{i=1}^{n-1}\sum_{j=1}^{n}m(m-1)^{j-1}\sum_{k=0}^{j}(-1)^{k}{j\choose k}{n-ik-1\choose j-1} \\ =m\sum_{i=1}^{n-1}\sum_{k=0}^{(n-1)/i}(-1)^{k}\sum_{j=k}^{n}(m-1)^{j-1}{j\choose k}{n-ik-1\choose j-1} \\ =m\sum_{i=1}^{n-1}\sum_{k=0}^{(n-1)/i}(-1)^{k}\frac{1}{n-ik}\sum_{j=k}^{n}(m-1)^{j-1}{j\choose k}{n-ik\choose j}j \]

枚举 \(i,k\) 的复杂度是 \(O(n\ln n)\) 的,考虑去掉 \(j\)。有两种做法:

\(t=n-ik\)

\[\sum_{j=k}^{n}(m-1)^{j-1}{j\choose k}{t\choose j}j \\ =\sum_{j=k}^{t}j(m-1)^{j-1}{t\choose k}{t-k\choose j-k} \\ ={t\choose k}\sum_{j=0}^{t-k}(j+k)(m-1)^{j+k-1}{t-k\choose j} \]

只看 \(\sum\) 后的,把 \(j+k\) 拆开,下以 \(j\) 为例

\[\sum_{j=0}^{t-k}j(m-1)^{j+k-1}{t-k\choose j} \\ =(m-1)^{k}\sum_{j=1}^{t-k}j(m-1)^{j-1}{t-k\choose j} \\ =\frac{1}{t-k-1}\sum_{j=1}^{t-k}(m-1)^{j+k-1}{t-k-1\choose j-1} \\ =\frac{1}{t-k-1}(m-1)^{k}\sum_{j=0}^{t-k-1}(m-1)^{j}{t-k-1\choose j} \\ =\frac{1}{t-k-1}(m-1)^{k}m^{t-k-1} \]

推导过程中时刻想着如何消掉 \(j\)。大致思路是先尽量分离来简化 \(\sum_{j}\) 后的式子,再通过 \(\sum_{j}(m-1)^{?(j)}{t-k\choose ?(j)}\) 构造二项式定理

个人感觉推式子比组合意义逻辑连贯,不易出错,更适合我这种弱智选手

生成树

变元矩阵树定理求出的是所有生成树边权积之和,那么将红绿蓝的边权分别设为 \(1,x,y\),矩阵树定理得到的多项式中 \(x^{i}y^{j}\) 的系数就是恰好有 \(i\) 条绿边、\(j\) 条蓝边的生成树数量,但我们只能通过行列式求值得到 \(\sum_{i=0}^{g}\sum_{j=0}^{b}f_{i,j}x^{i}y^{j}\)

不难发现该多项式有 \(\frac{n(n-1)}{2}\) 个系数(\(i+j<n\)),那么带等量点值进去做二维拉格朗日插值即可,由于常数小且不满,高斯消元也可水过

最短路径

树上路径唯一,可以点分治+NTT,但基环树上需要考虑最短路如何绕环

设环长为 \(len\),中点为 \(mid\),破环成链,那么 \([1,mid],[mid+1,len]\) 内部点之间的最短路一定在区间内,朴素分治解决。

\([1,mid],[mid+1,len]\) 分别均分为两个区间,从左到右记作区间 \(1,2,3,4\)
区间 \(2,3\) 之间点的最短路一定经过边 \((mid,mid+1)\),区间 \(1,4\) 之间点的最短路一定经过边 \((1,len)\),可以直接计算
而区间 \(1,3\)、区间 \(2,4\) 之间点的最短路是类似的子问题,递归求解

时间复杂度不会证,目测是 \(O(n\log^{2}n)\)

code

总结

问题有点大,经常一道题都不会做就开始摆烂,打的最低分暴力还总挂。还有思维混乱,不成体系,见到熟悉的东西意识不到。。。
学的时候只背结论不求证明也是个隐患

省选题确实难,事实上每天能切题的人也不多,拼的还是暴力,也许确实该调整心态&策略了,希望 WC 前能恢复状态

posted @ 2022-01-03 17:49  401rk8  阅读(88)  评论(1编辑  收藏  举报