AtCoder Regular Contest 163
1|0Preface
补题,这场比赛的时候被拉去开科研组会了,所以就没现场打了
这两天军训在伤病连划水,白天可以好好想题目舒服的一批
这场D题确实很妙,需要一些竞赛图相关的知识才能想到转化,不过也算是学到一个重要trick了吧
2|0A - Divide String
显然只要考虑能否分成两个串即可,首先如果存在使得则直接以为开头断开即可
否则对于所有的位置,暴力检验从这里分开是否合法即可
3|0B - Favorite Game
首先我们肯定只对修改是最优的,然后刚开始一眼想到二分答案,再感觉可以三分一下减少的次数
然后写了一发发现样例都过不去,遂赶紧发现是个丁真题
我们给排序后,枚举所有长度为的区间,考虑把变成这个能涵盖区间所需的最小代价即可
4|0C - Harmonic Mean
有意思的构造题,首先不难想到用裂项公式来构造,因为,所以我们总有如下构造方案(在时):
不难发现如果不能表示成的形式的话就已经做完了,现在就是要考虑重复的情况
由于一定是偶数,那么如果可以被这样表示那么就一定不能被这样表示,因此我们可以先用个数表示出,然后再填一个上去即可
举个例子对于,按照上面的方法分解出就是是不合法的
那么我们可以先处理的情况,,然后两边同乘上得到,最后再加上就可以用个数表示了
5|0D - Sum of SCC
首先有一个关于竞赛图的SCC的重要结论:
竞赛图强连通缩点后的DAG呈链状,前面的所有点向后面的所有点连边。
证明其实也很简单,利用归纳法逐一加入每个SCC即可,具体可以看这里
然后利用这点我们就可以把统计SCC数目转化为另一个问题了
设将图的点集划分为两个集合,且满足中的所有点与中的所有点的边的方向均为,则这种点集划分的方案数即为图的SCC个数加
证明的话就考虑上面的结论,我们将缩点后的DAG链记为,当时,边的方向均为
则对于,和均为满足上述要求的划分方案,且不存在在这之外的方案了
因此我们只要统计上面的问题的答案即可,这个很容易通过DP算出
设表示以及处理了前个点,其中有条边的方向是从小到大的,且集合的大小为的方案数
转移的话就考虑号点放在集合还是集合即可:
- 若放在集合,枚举原来集合中的边有条方向为从小到大,则
- 若放在集合,枚举原来集合中的边有条方向为从小到大,则
最后答案就是
6|0Postscript
好题很多,慢慢补吧
__EOF__

本文链接:https://www.cnblogs.com/cjjsb/p/17525474.html
关于博主:复活的ACM新生,目前爱好仅剩Gal/HBR/雀魂/单机/OSU
版权声明:转载请注明出处
声援博主:欢迎加QQ:2649020702来DD我
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
2019-07-04 2019绍一集训