杭电题解

在这里插入图片描述在这里插入图片描述

2019杭电第二场多校题解

by FZU ACM-ICPC training team

1001 Another Chess Problem

问题相当于:给定一个棋盘,有一些格子上有障碍物,询问两个格子之间最短路以及方案数。

通过观察可以发现将每一个包含 4 4 4 个格子的正方形空地当作下图的一个蓝色菱形,下图的顶点对应表示棋盘的格子,这样就转化为在下图中计算。[外链图片转存失败(img-lB1J6OS9-1563963533724)(Z:\hdu\tutorial\1001.png)]

可以先确定询问的两个点在这个图中是哪两个块,然后先考虑块间的移动顺序,可以发现连续走一个方向会比转方向多走 1 1 1 ,所以块间移动要使横着和竖着移动尽量错开,然后再考虑到点在块内也有个初始位置,所以可以枚举起点块出去的位置(顶点)和终点块进入的位置(顶点),最短路就是对四种情况取最小值。设每种情况最少连续同一个方向走的次数是 t t t

最 短 路 方 案 数 = 块 间 移 动 的 方 案 数 × 2 t × 两 个 端 点 到 出 去 方 向 的 方 案 数 最短路方案数 = 块间移动的方案数 \times 2^t \times 两个端点到出去方向的方案数 =×2t×

块间移动的方案数可以用组合计数算出。

1002 Beauty Of Unimodal Sequence

f [ i ] [ 0 ] f[i][0] f[i][0] 表示 a [ i ] a[i] a[i] 一定取,序列 a [ 1.. i ] a[1..i] a[1..i] 的最长上升子序列长度。

f [ i ] [ 1 ] f[i][1] f[i][1] 表示 a [ i ] a[i] a[i] 一定取,序列 a [ 1.. i ] a[1..i] a[1..i] 的最长单峰子序列长度。

g [ i ] [ 0 ] g[i][0] g[i][0] 表示 a [ i ] a[i] a[i] 一定取,序列 a [ i . . n ] a[i..n] a[i..n] 的最长下降子序列长度。

g [ i ] [ 1 ] g[i][1] g[i][1] 表示 a [ i ] a[i] a[i] 一定取,序列 a [ i . . n ] a[i..n] a[i..n] 的最长单峰子序列长度。

转移式子挺容易想的,留给读者思考。

枚举单峰子序列最高点下标,可以很方便的求出最长单峰子序列长度。

接下来逐位确定字典序最大的子序列。经过仔细观察可以发现,将候选集合按照下标排序之后,它们的值是单调的。利用该性质即可得出字典序最大最小的最长单峰子序列。

1003 Coefficient

f ( x ) = b c + e a x + d 容 易 想 到 把 分 母 乘 到 左 边 再 双 端 求 导 得 : ( c + e a x + d ) f ( x ) = b a e a x + d f ( x ) + ( c + e a x + d ) f ′ ( x ) = 0 f ′ ( x ) = − a f ( x ) ( 1 − c c + e a x + d ) f ′ ( x ) = − a b f ( x ) ( b − c f ( x ) ) 假 设 这 里 a 暂 时 吃 掉 了 b 并 且 取 了 相 反 数 , 得 到 : f ′ ( x ) = a f ( x ) ( b − c f ( x ) ) 令 X = f ′ ( x ) 即 有 : X ′ = a X ( b − c X ) 至 此 , 可 以 看 出 X 的 任 意 阶 导 数 都 是 关 于 X 的 多 项 式 且 形 如 X ( n ) = X P n ( X ) , n ≥ 0 对 上 式 再 次 求 导 , 得 到 : X ( n + 1 ) = X ′ P n ( X ) + X P n ′ ( X ) X ′ = X ′ ( P n ( X ) + X P n ′ ( X ) ) = a X ( b − c X ) ( P n ( X ) + X P n ′ ( X ) ) = X P n + 1 ( X ) P n + 1 ( X ) = a ( b − c X ) ( P n ( X ) + X P n ′ ( X ) ) 以 x 代 X , 下 面 将 多 项 式 看 成 关 于 x 的 多 项 式 : P n + 1 = a ( b − c x ) ( x P n ) ′ 不 难 发 现 , 上 式 可 改 写 成 : P n + 1 = ( a ( b − c ∫ ) D x ) ∘ P n = ( a b D x − a c x ) ∘ P n P n + 1 = a ( b ( x P n ) ′ − c x P n ) = ( a b x P n e c b x ) ′ e c b x 假 设 这 里 a 吐 出 了 刚 才 吃 掉 的 b : P n + 1 e c b x = ( a x P n e c b x ) ′ 令 B n = P n e c b x 带 入 得 到 : B n + 1 = ( a x B n ) ′ = a D x ∘ B n 故 显 然 有 : B n = a n ( D x ) n ∘ B 0 亦 即 : P n = ( a n ( D x ) n ∘ ( e − c b x ) ) e c b x 令 A k = { a n ( k + 1 ) n ( − c b ) k 1 k ! } B k = { ( c b ) k 1 k ! } P n = A × B , P n 第 k 项 乘 k ! 注 意 这 里 × 表 示 序 列 卷 积 f(x)=\frac{b}{c+e^{ax+d}} \\ 容易想到把分母乘到左边再双端求导得:\\ (c+e^{ax+d})f(x)=b\\ ae^{ax+d}f(x)+(c+e^{ax+d})f'(x)=0 \\ f'(x)=-af(x)(1-\frac{c}{c+e^{ax+d}}) \\ f'(x)=-\frac{a}{b}f(x)(b-cf(x)) \\ 假设这里 a 暂时吃掉了 b 并且取了相反数,得到:\\ f'(x)=af(x)(b-cf(x)) \\ 令X=f'(x)即有: \\ X'=aX(b-cX) \\ 至此,可以看出X的任意阶导数都是关于X的多项式\\ 且形如X^{(n)}=XP_n(X),n \ge 0 \\ 对上式再次求导,得到:\\ X^{(n+1)}=X'P_n(X)+XP_n'(X)X'=X'(P_n(X)+XP_n'(X)) \\ =aX(b-cX)(P_n(X)+XP_n'(X))=XP_{n+1}(X) \\ P_{n+1}(X)=a(b-cX)(P_n(X)+XP_n'(X))\\ 以x代X,下面将多项式看成关于x的多项式:\\ P_{n+1}=a(b-cx)(xP_n)'\\ 不难发现,上式可改写成:\\ P_{n+1}=(a(b-c\int)Dx)\circ P_n=(abDx-acx)\circ P_n \\ P_{n+1}=a(b(xP_n)'-cxP_n)=(\frac{abxP_n}{e^{\frac{c}{b}x}})'e^{\frac{c}{b}x} \\ 假设这里a吐出了刚才吃掉的b:\\ \frac{P_{n+1}}{e^{\frac{c}{b}x}}=(\frac{axP_n}{e^\frac{c}{b}x})'\\ 令B_n=\frac{P_n}{e^{\frac{c}{b}x}}带入得到:\\ B_{n+1}=(axB_n)'=aDx \circ B_n \\ 故显然有:\\ B_n=a^n(Dx)^n\circ B_0 \\ 亦即:\\ P_n=(a^n(Dx)^n\circ (e^{-\frac{c}{b}x}))e^{\frac{c}{b}x} \\ 令A_k=\{a^n(k+1)^n(-\frac{c}{b})^k\frac{1}{k!}\}\\ B_k=\{(\frac{c}{b})^k\frac{1}{k!}\} \\ P_n=A \times B,P_n第k项乘k! \\ 注意这里\times表示序列卷积 f(x)=c+eax+db(c+eax+d)f(x)=baeax+df(x)+(c+eax+d)f(x)=0f(x)=af(x)(1c+eax+dc)f(x)=baf(x)(bcf(x))ab,f(x)=af(x)(bcf(x))X=f(x)X=aX(bcX)XXX(n)=XPn(X)n0X(n+1)=XPn(X)+XPn(X)X=X(Pn(X)+XPn(X))=aX(bcX)(Pn(X)+XPn(X))=XPn+1(X)Pn+1(X)=a(bcX)(Pn(X)+XPn(X))xX,xPn+1=a(bcx)(xPn)Pn+1=(a(bc)Dx)Pn=(abDxacx)PnPn+1=a(b(xPn)cxPn)=(ebcxabxPn)ebcxabebcxPn+1=(ebcxaxPn)Bn=ebcxPnBn+1=(axBn)=aDxBnBn=an(Dx)nB0Pn=(an(Dx)n(ebcx))ebcxAk={an(k+1)n(bc)kk!1}Bk={(bc)kk!1}Pn=A×B,Pnkk!×

得 到 P n 之 后 , 答 案 r e t = 1 n ! X P n ( X ) , X = f ( x 0 ) 但 是 这 只 是 回 答 了 一 个 询 问 , 显 然 不 能 每 个 询 问 都 去 做 卷 积 不 同 询 问 变 化 的 参 数 是 a , b , c , d , 不 变 的 参 数 是 n , 考 虑 变 化 的 参 数 的 影 响 不 难 发 现 , a 对 答 案 的 影 响 就 是 a n , b 的 影 响 就 是 乘 b , d 显 然 没 有 影 响 考 虑 c 的 影 响 , 首 先 X = f ( x 0 ) 发 生 变 化 , 其 次 P n 中 x k 这 一 项 系 数 乘 c k 不 妨 令 a = b = c = d = 1 , 然 后 得 到 P n 之 后 , 在 逐 个 询 问 进 行 微 观 调 整 易 得 : a n s = 1 n ! a n b c + 1 P n ( c c + 1 ) 然 后 主 要 任 务 就 转 化 为 对 已 知 的 多 项 式 P n , 进 行 多 点 求 值 而 这 是 多 项 式 的 经 典 问 题 , 可 以 使 用 时 间 复 杂 度 为 O ( n l o g 2 n ) 的 算 法 得到P_n之后,答案ret=\frac{1}{n!}XP_n(X),X=f(x0)\\ 但是这只是回答了一个询问,显然不能每个询问都去做卷积\\ 不同询问变化的参数是a,b,c,d,不变的参数是n,考虑变化的参数的影响\\ 不难发现,a对答案的影响就是a^n,b的影响就是乘b,d显然没有影响\\ 考虑c的影响,首先X=f(x0)发生变化,其次P_n中x^k这一项系数乘c^k\\ 不妨令a=b=c=d=1,然后得到P_n之后,在逐个询问进行微观调整\\ 易得:ans=\frac{1}{n!}\frac{a^nb}{c+1}P_n(\frac{c}{c+1})\\ 然后主要任务就转化为对已知的多项式P_n,进行多点求值\\ 而这是多项式的经典问题,可以使用时间复杂度为O(nlog^2n)的算法 Pnret=n!1XPn(X),X=f(x0)a,b,c,dnaanbbdcX=f(x0)Pnxkcka=b=c=d=1,Pnans=n!1c+1anbPn(c+1c)Pn使O(nlog2n)

1004 Double Tree

首先对第一棵树进行边分治,假设当前我们正在考虑经过中心边 ( s t , e d ) (st, ed) (st,ed) 的所有路径,我们不妨把切掉中心边之后所有和 s t st st 联通的点标成黑色,所有和 e d ed ed 联通的点标成白色。

定义黑点 u u u 的权值 $h(u) = T_1.dis(u, st) + T_1.val(st, ed) / 2 + val(u) $

定义白点 v v v 的权值 $h(v) = T_1.dis(v, ed) + T_1.val(st, ed) / 2 + val(v) $

那么

KaTeX parse error: No such environment: align at position 59: …al(v) \\ \begin{̲a̲l̲i̲g̲n̲}̲ &= T_1.dis(u, …
现在对于边分治的每个联通块,我们需要考虑第二棵树。第二棵树上有些点是白色,有些点是黑色,有些点无色,对于每次修改,我们需要找一个黑点 u u u,一个白点 v v v 使得 h ( u ) + h ( v ) + T 2 . d i s ( u , v ) h(u) + h(v) + T_2.dis(u, v) h(u)+h(v)+T2.dis(u,v) 最大。

首先我们有一个结论:

对于一棵边权全是正的树,假如这棵树上有一个点集 A 的最长路端点分别是 u, v,另有一个点集 B 的最长路端点分别是 a, b,那么点集 A ∪ B 的最长路端点 ∈ {u, v, a, b}。

因为有修改操作,所以 h ( i ) h(i) h(i) 的值是在动态变化的,我们用四元组 ( i , l , r , w ) (i, l, r, w) (i,l,r,w) 表示 i i i 点在时刻 [ l , r ] [l, r] [l,r] 的权值 h ( i ) = w h(i) = w h(i)=w。对其进行线段树分治,则修改操作就变成了只有加边操作。

1005 Everything Is Generated In Equal Probability

考虑一个长度为 n n n 的随机排列(无相同元素),它所含逆序对数量的数学期望为 ( n 2 ) 2 \frac{\binom{n}{2}}{2} 2(2n) 。因为每对下标对期望的贡献为 1 / 2 1/2 1/2 ,且期望具有可加性。

f ( i ) f(i) f(i) 表示传入一个长度为 i i i 的随机排列所获得的函数返回值的数学期望。

容易得到: f ( i ) = 1 2 i ∑ j = 0 i ( i j ) f ( j ) f(i)=\frac{1}{2^i}\sum_{j=0}^i\binom{i}{j}f(j) f(i)=2i1j=0i(ji)f(j)

改写为: f ( i ) = 1 2 i − 1 ∑ j = 0 i − 1 ( i j ) f ( j ) f(i)=\frac{1}{2^i-1}\sum_{j=0}^{i-1}\binom{i}{j}f(j) f(i)=2i11j=0i1(ji)f(j)

这样可以 O ( N 2 ) O(N ^ 2) O(N2) 预处理出 f ( i ) , i ∈ [ 1 , N ] f(i),i\in[1,N] f(i),i[1,N]

a n s ( n ) = 1 n ∑ i = 1 n f ( i ) ans(n)=\frac{1}{n}\sum_{i=1}^{n}f(i) ans(n)=n1i=1nf(i)

O ( 1 ) O(1) O(1) 回答每组数据。

时间复杂度 O ( N 2 + Q ) O(N^2+Q) O(N2+Q)

1006 Fantastic Magic Cube

一共有 n 3 n^3 n3 个单位立方体,将每两个不同单位立方体之间连一条边,边权为这两个单位立方体的价值乘积。如果将一个块 A A A 切成块 B B B 和块 C C C ,显然就切断了 B B B C C C 的联系,获得了它们之间的边权之和,因此无论怎么切,其实答案是一样的。

N = n 3 N = n ^ 3 N=n3 a i a_i ai 表示第 i i i 个单位立方体的价值。 a n s = ∑ 1 ≤ i &lt; j ≤ N a i ∗ a j = ( ∑ i = 1 N a i ) 2 − ∑ i = 1 N a i 2 2 ans = \sum_{1\le i&lt;j\le N}a_i*a_j=\frac{(\sum_{i=1}^Na_i)^2-\sum_{i=1}^Na_i^2}{2} ans=1i<jNaiaj=2(i=1Nai)2i=1Nai2。使用 f w t fwt fwt 计算出所有单位立方体值得分布(也就是计算每种值各有多少个)即可解出该式。

1007 Game

这是一个不平等博弈游戏,采用 s u r r e a l   n u b m e r surreal \space nubmer surreal nubmer 计算游戏局面,最后计算游戏和的状态。

注意到游戏局面,没有超出 s u r r e a l   n u b m e r surreal \space nubmer surreal nubmer 的表示范围;

如果计算出来的数 &gt; 0 &gt;0 >0 ,左边的人获胜; &lt; 0 &lt;0 <0 右边的人获胜; = 0 =0 =0 表示后手获胜;注意没有先手获胜的情况;更没有其他情况。

1008 Harmonious Army

对每个士兵建立一个点 x x x ,点 x x x 向源点 s s s 连一条边,向汇点 t t t 连一条边,分别表示选择两种职业,然后就可以先加上所有的贡献,通过两点关系用最小割建模,如下图所示。

[外链图片转存失败(img-fcgncuyd-1563963533727)(Z:\hdu\tutorial\1008.png)]

设一条边的三种贡献为 A , B , C A,B,C ABC,可以得到以下方程:

$a + b = A + B ( ( x, y$ 都选 Mage)

$c + d = C + B ( ( x, y$ 都选 Warrior)

$a + d + e = A + C ( ( x$ 选 Mage, y y y 选 Warrior )

$b + c + e = A + C ( ( x$ 选 Warrior, y y y 选 Mage )

可得一组解 $ a = b =(A + B)/ 2, c = d = (C + B) / 2, e = -B + (A + C) / 2$ ,然后将所有有关系的两点的图合并,用所有贡献减掉这个图的最小割即可。

1009 I Love Palindrome String

求出本质不同回文串的数量分布(求每种回文串的个数),然后对每种快速 c h e c k check check 一下,叠加答案即可;可以用 m a n a c h e r manacher manacher ,后缀自动机,回文自动机,字符串 h a s h hash hash 多种做法实现。

1010 Just Skip The Problem

最优的方案必然是每次询问一个位的具体值,一共有 n n n 个二进制位,方案数显然为 n ! n! n!

复杂度 O ( m i n ( n , P ) ) , P = 1 e 6 + 3 O(min(n, P)) , P=1e6+3 O(min(n,P)),P=1e6+3

##1011 Keen On Everything But Triangle

首先考虑区间最大的三个数能否形成三角形,如果不能,考虑区间第二大、第三大、第四大的三个数,以此类推,直到能形成三角形。由三角形最小的两条边大于第三边的性质可知,只需要考虑区间的前 44 44 44 大数即可(最坏情况下区间前几大数形成了斐波那契数列)。

时间复杂度 O ( n l o g 2 n ∗ 44 ) O(nlog_2n*44) O(nlog2n44)

1012 Longest Subarray

如果右端点固定,对于每种元素,可行的左端点下标是两段连续的区间。

对于每种元素,将它的可行左端点区间在线段树中加一。

当右端点右移的时候,维护 C C C 种元素的可行左端点。

查询时只需要询问线段树中最小的、值为 C C C 的下标即可。在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值