首页 > 其他 > 详细

「解题报告」AtCoder Regular Contest117

时间:2021-04-19 11:18:48      阅读:42      评论:0      收藏:0      [点我收藏+]

A. God Sequence

先把正的负的 \(1\dots a-1,1\dots b-1\) 填上,如果正数多那么最后一个负数放两者和的相反数,负的多类似

B.ARC Wrecker

考虑没两种高度的差值来决定方案数

那么排序去重之后将两两的差 \(+1\) 乘起来即可

C.Tricolor Pyramid

给白色红色蓝色分别赋 \(1,2,3\) 的权值,那么不难发现合成出来的数和底下两个的权值和模 \(3\)\(0\)

那么就是每个点到金字塔顶的方案数乘权值的和(还要通过 \(n\) 的奇偶性来判断正负)

\((1,1)\)\((n,x)\) 的方案数的组合意义就是可以选择 \(x-1\) 个地方向右走一步,那么方案数是 \(\binom {n-1}{x-1}\)

考虑到我们只关注其模 \(3\) 的余数,那么直接记录每个阶乘有多少因子 \(3\) 和模 \(3\) 的余数即可

D.Miracle Tree

按照欧拉序的思路不难发现直接遍历这个树,每次回溯的时候给计数器加一的话,遍历到的最后一个点是 \(2(n-1)\)

但是不难关注到我们并不需要在遍历完整个树之后再在回溯时改变计数器

所以计数器的最终值就是 \(2(n-1)-\) 一个链的长度

为了得到最小值,那么可以先整出来直径,以直径的一个端点为根再次进行 \(dfs\)

\(dfs\) 的过程中注意对长度大的链最后访问,这个可以按照长链剖分的方式预处理出来重儿子最后访问

当然也可以每次排个序,复杂度也合法

E.Zero-Sum Ranges 2

先求前缀和,那么 \(k\) 的个数就是前缀和相同的对数(这里特别注意要把 \(s_0\) 也算上)

我们考虑按照绝对值从小到大加入 \(s_i\),这时候不难发现序列的形态是若干个连续段

同时有一些空缺,而这些空缺的两端都是单调的段,空缺里面的元素比两边的值大

定义 \(dp[i][j][k]\) 表示 \(i\) 个元素,\(j\) 对相同的前缀和,\(k\) 个空缺

转移考虑加入 \(s_i\) 的个数,设其为 \(x\) 则会转移给 \(dp[i+x][j+\binom x2][x-k-2]\),系数为 \(\binom {x-1}{k+1}\)

最后一维的值考虑只放入一个 \(s_i\) 的空缺就被结束了,系数也是类似隔板的东西

统计答案的时候对 \(\rm{dp[i][j][k]\times dp[(2n+1)-i][k-j][k-1]}\) 求和,可以理解为大于 \(0\) 的前缀和 和 小于 \(0\) 的前缀和

实现的话组合数可以直接杨辉三角,由 \(python3,\binom{60}{30}\) 只有 \(1e17\) 左右

F没看,就摸掉了

「解题报告」AtCoder Regular Contest117

原文:https://www.cnblogs.com/yspm/p/14675430.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!