2019 ICPC南京站部分官方题解

A. A Hard Problem

对于 n n n个数,其中有 ⌈ n 2 ⌉ \lceil \frac{n}{2} \rceil 2n个奇数。对于这 n n n个数,都可以表示为 a × 2 k a\times 2^k a×2k这种形式。其中, k ≥ 0 k\geq 0 k0 a a a为奇数且 a ≤ n a\leq n an。我们从中取出 ( ⌈ n 2 ⌉ + 1 ) (\lceil \frac{n}{2}\rceil +1) (2n+1)个数字,将它们表示成上述的形式,根据鸽笼原理,那么其中一定有两个数具有相同的 a a a,那么这两个数可以表示成 a × 2 p a\times 2^p a×2p a × 2 q a \times 2^q a×2q,那么一个数必定是另一个数的因数。

接下来,如果我们选择$\lceil \frac{n}{2}\rceil 个 数 , 如 果 我 们 现 在 选 择 最 大 的 个 个数,如果我们现在选择最大的个 \lceil \frac{n}{2} \rceil 数 , 这 时 候 , 对 于 每 一 个 数 数,这时候,对于每一个数 b , 与 它 最 接 近 的 并 且 是 它 因 子 的 数 ,与它最接近的并且是它因子的数 \frac{b}{2}$一定在剩下的没有选择的数中。因此,选出这么多数是不成立的。

综上,答案为 ⌈ n 2 ⌉ + 1 \lceil \frac{n}{2} \rceil +1 2n+1

B. Chessboard

首先,我们可以观察到如下几个不难证明的性质:

  1. 两个被染上颜色的格子之间的距离始终为:曼哈顿距离。
  2. 一个染色方案是合法的,当且仅当:任何时刻,每行/列被染色的格子要么不存在,要么是连续的一段。
  3. 如果当前被染色的区域是个矩形,那么最后一个被染色的点,一定在角上。

接下来,可以手玩一些例子:

#和$ 代表被染色的格子,$ 是最后一个被染色的格子,. 代表未染色的格子,当前状态为下所示。

....  
....
##$.
###.

先随便走一步

....  
..$.
###.
###.

这时,受到命运的指引,我们接下来必须扩充一行。为什么呢?

如果接下来我下一步就是不去 A,跑到别的地方去玩。(如下:我们将 3 个未染色的格子标记成 ABC)

.B..  
CA$.
###.
###.

那接下来要想给 A 染色我是不是必须到达 B,C 中的某个一个格子呢?等到那个时候… 完蛋了啊!!!

因此,我下一步必须去 A,下下步必须去 C。

于是,可以得出以下结论:

如果当前被染色的区域是个 r ( r ≥ 2 ) r(r \geq 2) r(r2) c ( c ≥ 2 ) c(c \geq 2) c(c2) 列的矩形,那么接下来要么扩充成 r + 1 r+1 r+1 c c c 列的矩阵(扩充行),要么扩充成 r r r c + 1 c+1 c+1 列的矩形(扩充列)。并且根据当前状态中最后一个被染色的格子在哪个角上,扩充行/列的方案都是唯一的。

1 ∗ 1 1*1 11 的矩阵,到 n ∗ m n*m nm 的矩阵,一共要扩充 n + m − 2 n+m-2 n+m2 次,其中有 n − 1 n-1 n1 次是扩充行,这样的决策有 ( n + m − 2 n − 1 ) \binom{n+m-2}{n-1} (n1n+m2) 种,根据最后一个被染色的格子在哪个角上,方案数为 4 ∗ ( n + m − 2 n − 1 ) 4*\binom{n+m-2}{n-1} 4(n1n+m2)

Corner case: n = 1 n=1 n=1 或者 m = 1 m=1 m=1,小心特判掉即可。

C. Digital Path

d p [ i ] [ j ] [ k ] dp[i][j][k] dp[i][j][k]表示结尾是 ( i , j ) (i,j) (i,j) 且长度为 k k k的左端不能扩展的路径方案数,这里的 k k k最大为 4 4 4,我们初始化长度为 1 1 1的不能向左扩展的路径对应的状态,然后按照格子的权值从小到大的顺序 d p dp dp即可,最后累和方案数的时候注意判断路径是否可以往右扩展。

D. Hole

  • 定义 p ( k , x , y ) p(k,x,y) p(k,x,y) 为从起点,随机游走 k k k 步后在 ( x , y ) (x,y) (x,y) 的概率, P ( x , y ) = ∑ k = 0 + ∞ p ( k , x , y ) P(x,y)=\sum_{k=0}^{+\infty} p(k,x,y) P(x,y)=k=0+p(k,x,y)
  • 定义 e ( k , x , y ) = p ( k , x , y ) ∗ k e(k,x,y) = p(k,x,y) * k e(k,x,y)=p(k,x,y)k E ( x , y ) = ∑ k = 0 + ∞ e ( k , x , y ) E(x,y)=\sum_{k=0}^{+\infty} e(k,x,y) E(x,y)=k=0+e(k,x,y)
  • 那么对每个洞 ( x , y ) (x,y) (x,y), E ( x , y ) P ( x , y ) \frac{E(x,y)}{P(x,y)} P(x,y)E(x,y) 即为答案。
  • 定义 o u t ( x , y ) out(x,y) out(x,y) ( x , y ) (x,y) (x,y) 的出度,设走一步能到达 ( x , y ) (x,y) (x,y) q q q 个点为 ( x 1 ′ , y 1 ′ ) , . . . . ( x q ′ , y q ′ ) (x'_1, y'_1),....(x'_q,y'_q) (x1,y1),....(xq,yq)。那么当 k ≥ 1 k \geq 1 k1 时,有
    • p ( k , x , y ) = ∑ i = 1 q p ( k − 1 , x i ′ , y i ′ ) o u t ( x i ′ , y i ′ ) p(k,x,y) = \sum_{i=1}^{q}\frac{p(k-1,x_i',y_i')}{out(x_i',y_i')} p(k,x,y)=i=1qout(xi,yi)p(k1,xi,yi)
    • e ( k , x , y ) k = ∑ i = 1 q e ( k − 1 , x i ′ , y i ′ ) ( k − 1 ) o u t ( x i ′ , y i ′ ) \frac{e(k,x,y)}{k} = \sum_{i=1}^{q}\frac{e(k-1,x_i',y_i')}{(k-1)out(x_i',y_i')} ke(k,x,y)=i=1q(k1)out(xi,yi)e(k1,xi,yi)
    • 对以上两个式子,的等式最右边,分别将 k 从 1 到正无穷进行累和,分别可以得到关于 P ( x , y ) , E ( x , y ) P(x,y), E(x,y) P(x,y),E(x,y) 的两个线性方程组。
  • P ( x , y ) , E ( x , y ) P(x,y), E(x,y) P(x,y),E(x,y)可用高斯消元求出,因为有 O ( n m ) O(nm) O(nm) 个变量,进行高斯消元复杂度为 O ( n 3 m 3 ) O(n^3m^3) O(n3m3)
  • 注意到所有的变量都可以写成关于“棋盘中每行第一个从起点能到达的点对应的变量”的线性函数,如此一来变量数可以减少到 O ( n ) O(n) O(n) 个,高斯消元的复杂度为 O ( n 3 ) O(n^3) O(n3)

I. Space Station

f ( c [ ] ) f(c[]) f(c[]) 表示,从“权值为 i i i 的点,恰有 c [ i ] c[i] c[i] 个被访问过”的状态出发,访问所有点,有几种方案。

  • ∑ i = 1 m i c [ i ] ≥ m \sum_{i=1}^{m}ic[i] \geq m i=1mic[i]m 时,剩下的点可以任意次序访问。
  • ∑ i = 1 m i c [ i ] < m \sum_{i=1}^{m}ic[i] < m i=1mic[i]<m 时,可以验证 ∑ i = 1 m i c [ i ] < m \sum_{i=1}^{m} ic[i] < m i=1mic[i]<m 的非负整数解不会太多,对 f ( c [ ] ) f(c[]) f(c[]) 记忆化搜索即可,事实上, ∑ i = 1 m i c [ i ] = x \sum_{i=1}^{m} ic[i] = x i=1mic[i]=x, ( x ≤ m ) (x \leq m) (xm) 的解数为 x x x 的有序拆分数。

K. Triangle

首先枚举P在哪个边上,用叉积和点积来判断,如果确定了P在AB边上,然后就是求平分线PE,假设P离得A近,那么E一定落在BC上,我们以这种情况举例子,其他同理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pE7egbeU-1575275555709)(C:\Users\黄敏聪\AppData\Roaming\Typora\typora-user-images\image-20191130122848970.png)]

解法1:

根据叉积算面积的方法, ∣ B A ∣ × ∣ B C ∣ × s i n B × 0.5 = ∣ B P ∣ × ∣ B E ∣ × s i n B |BA|\times|BC|\times sinB\times 0.5=|BP|\times|BE|\times sinB BA×BC×sinB×0.5=BP×BE×sinB,直接算出 ∣ B E ∣ |BE| BE进而求出点E

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DNYVo3HG-1575275555710)(C:\Users\黄敏聪\AppData\Roaming\Typora\typora-user-images\image-20191130123037020.png)]

解法2:

取AB中点D,则CD为一条平分线,连接PC,过点D做DE平行于PC交BC与点E,则PE即为平分线。

证明:可以证出下面红色部分两三角形面积相等然后有PEB的面积和BCD相等.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值