【水向】Atcoder杂题

[AGC005C] Tree Restoring

已经意识到了我很可能做不出来这道题。。。

选择路径最短的节点作为根节点。 c u c_u cu 表示整棵树的深度。

注意到这样一个性质:从 x x x 出发的最长路径 x − > y x->y x>y y y y 一定是树的直径的一个端点。

我们同时知道, f m a x ( x ) f_{max}(x) fmax(x) 一定是直径的某一端点

对于 f : A − > B f : A -> B f:A>B,对于 x ∈ [ 1 , n ] x \in [1,n] x[1,n] ,都有唯一的 y ∈ [ 1 , n ] y \in [1,n] y[1,n] 与之对应。 这个 y y y 一定是端点。

对于每一个点,它到直径都有一个交点,否则与直径的最长性矛盾。路径长度的下限是 a n / 2 a_n/2 an/2 ,再考虑路径中间的特殊位置即可。

[AGC013E] Placing Squares

不难想到矩阵乘法。

f x − 1 = ∑ y = 1 x − 1 f y ∗ ( x − y − 1 ) 2 f_{x-1}=\sum_{y=1}^{x-1} f_y*(x-y-1)^2 fx1=y=1x1fy(xy1)2

g x − 1 = ∑ y = 1 x − 1 f y ∗ ( x − y − 1 ) g_{x-1}=\sum_{y=1}^{x-1} f_y*(x-y-1) gx1=y=1x1fy(xy1)

h x − 1 = ∑ y = 1 x − 1 f y h_{x-1}=\sum_{y=1}^{x-1} f_y hx1=y=1x1fy


f x = ∑ y = 1 x − 1 f y ∗ ( x − y ) 2 + 0 f_x=\sum_{y=1}^{x-1} f_y*(x-y)^2 + 0 fx=y=1x1fy(xy)2+0

= f x − 1 + 2 g x − 1 + h x − 1 =f_{x-1}+2g_{x-1}+h_{x-1} =fx1+2gx1+hx1

g x = ∑ y = 1 x − 1 f y ∗ ( x − y ) + 0 g_x=\sum_{y=1}^{x-1} f_y*(x-y) + 0 gx=y=1x1fy(xy)+0

$ =g_{x-1}+h_{x-1}$

h x = h x − 1 + f x h_x=h_{x-1}+f_x hx=hx1+fx

$ =f_{x-1}+2g_{x-1}+2h_{x-1}$

我们有两种策略:

  • 换一种dp状态

  • 优化dp转移方式 ( l o g n ) (logn) logn

时间复杂度 O ( m l o g n ) O(mlogn) O(mlogn)

考虑修改。这道题做完了。观察发现只有 h x h_x hx 这一项会变化。

[AGC006B] Median Pyramid Easy

构造题。。。

以我的智商怎么可能想出来。。。

考虑每一层是所对应的下一层的中位数,考虑将大于等于 x 的置为1,小于 x 的置为0。

分类讨论一下:

  1. (0,0,0) => (0)
  2. (0,1,0) => (0)
  3. (0,1,1) => (1)
  4. (1,1,1) => (1)

显然第 3 种情况最优吧,考虑尽量把所有数转化成1。

上述算法太笼统了,并不能很好地满足条件。正解是构造两个相邻的 m。其实也不难。

[AGC006D] Median Pyramid Hard

考虑二分答案。

如果最后剩下的数是1,说明实际的数更大。考虑如何对于01序列确定操作后剩下的数。

事实上为1可以等价转化为cnt_1 \req 2

由浅入深。考虑n=2的情况,显然只需要1的个数 \req 2。

考虑连续的01块。这题大概就做完了吧。

*[AGC001C] Shorten Diameter

贪心没毛病。

我们知道删除叶子节点后直径的长度最多减少1。

直径的中心点实际上是在一直变化的。

[AGC001D] Arrays and Palindrome

比较惭愧的是题目没读懂。

题目的中心问题其实是使得满足回文串性质的一定由相同字符构成。进一步说,也就是满足连边后存在一笔画。

而我们知道一笔画存在的必要条件是:

  1. 连通图
  2. 度数为1的点小于等于2个

体现在本题中,奇回文串就会产生一个度数为1的点。这样的点不能超过2个。

剩下的分类讨论就行了。构造方案也很容易想出来吧,就是尾对尾,把奇数放在序列两端就好了。因为这两个点一定是路径的起点和终点,放在特殊位置会容易一些。

然后就是我主要考虑了全为2的情况,才想到首位构造奇数块来达到交错的目的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值