多校 A 层冲刺 NOIP2024 模拟赛 05

news/2024/10/11 20:37:57

多校A层冲刺NOIP2024模拟赛05

T1 好数(number)

签到题

首先 \(O(nV)\) 的背包暴力是显然的,注意到本题只需要合法性,状态只有 \(0/1\),上 \(bitset\) 优化转移即可。

时间复杂度 \(O(\frac{nV}{w})\)

T2 SOS字符串(sos)

签到题

计数题难点在不重不漏,而本题则主要是不重。

考虑一种好的计算 sos 贡献的方式,即可以钦定第一次出现时才会产生贡献( sosos 只计算最左边 \(3\) 个贡献)。

上组合数学显然很麻烦,会分讨很多东西,考虑 \(DP\)

设计状态 \(f_{i,j,k}\) 表示前 \(i\) 个,已经有 \(j\) 个 sos,结尾情况为 k 时的方案数。由于只有大于等于 \(3\) 个 sos 才有贡献,所以将大于等于 \(3\) 个 sos 压缩到一维(算是一个小 trick )。

结尾情况钦定好情况,转移大力分讨乘上系数就好了。

时间复杂度呈线性。

可以矩乘优化变为 \(O(wlogn)\),其中 \(w\) 为一次矩乘的复杂度。

T3 集训营的气球(balloon)

计数题,DP,背包,退背包

注意到 \(c\) 很小,是解题的关键点,考虑容斥去计算恰有 \(1~c-1\) 的方案数,答案即为总方案数减去上述方案总数。

这显然是一个背包问题,直接做一次的复杂度是 \(O(nc)\),加上询问复杂度就爆炸了。

注意到本题背包的性质,显然转移顺序是没有任何影响的,并且转移具有可逆性

并且本题是单点修改,所以可以使用退背包。具体的直接逆向减去原点的影响,再重新加入新点的影响。

时间复杂为 \(O(q(c+log))\),多个 \(log\) 是由于会计算逆元。

T4 连通子树与树的重心(tree)

计数题,DP,树的重心,退背包

不要用题目描述重心的定义去做本题,即使此最大值取到最小的节点被称为整个树的重心,而是考虑更数学的定义,即以树的重心为根时,所有子树的大小都不超过整棵树大小的一半 (size/2)

首先正常求出重心,对重心个数进行分讨:

若为 \(2\) 个,显然将重心相连的边删去后两个以重心为根的树的 \(size\) 是相等的,直接树上背包分别求出这两个点所在连通块且不包含对方所有 \(size\) 的方案数,答案即为 \(\prod_{i=1}^{n}size_{rt_1,i}size_{rt_2,i}\)
时间复杂度瓶颈在树上背包为 \(O(n^2)\)

若为 \(1\) 个,考虑重心的定义所有子树的大小都不超过整棵树大小的一半,并且只有一个重心,记一个点所在连通块总大小为 \(tot\),限制变为所有子树的大小都不超过 (tot-1)/2,证明考虑当有两个重心的时候 \(tot\) 必定为偶数。这个限制能使用背包解决,具体的记 \(f_{i,j}\) 表示 \(i\) 所在连通块且不包含其父亲时大小为 \(j\) 时的方案数,求出 \(f\) 数组,然后外层枚举重心所在连通块 \(tot\) 的大小,内层枚举重心儿子将上界设置为 \((tot-1)/2\) 再用一个新的数组再跑一遍背包就行。
这样就得到一个 \(O(n^3)\) 的做法,期望得分 50 pts。
考虑容斥优化,同 T3,即计算总方案数减去不合法方案数。注意到一个方案不合法当且仅当子树中存在一个 \(size\) 大于限制,而由于限制是 \((tot-1)/2\) 不满足这个限制的子树只会有一个,考虑枚举不合法子树即可,不合法方案即为
\(\sum_{v\in son_{rt}}\sum_{tot=1}^{n}\sum_{j=(tot-1)/2+1}^{min(size_v,i)}f_{v,j}\ g_{v,tot-j}\)
其中 \(g_v\) 是去除去了点 \(v\) 影响对应的 \(f_{rt}\),同 T3 一样可以退背包求解 \(g\) 数组。具体的以求解 \(g_{v,j}\) 为例,先将 \(f_{rt,j}\to g_{v,j}\),考虑背包加入的过程是 \(\sum_{k=0}^{i}f_{u,k}f_{v,i-k}=f_{u,i}+\sum_{k=0}^{i-1}f_{u,k}f_{v,i-k}\to f_{u,i}\),其中 \(i\) 是从大到小遍历的。退背包时即需保留原 \(f_{u,i}\) 即减去第二项即可,此时 \(i\) 得从小到大遍历,因为加入时的前继状态是已经退背包结束了的。

这一部分的时间复杂度即为遍历计算不合法方案式子复杂度,复杂即为 \(O(n^2)\)

总时间复杂度为 \(O(n^2)\)

关于树上背包的复杂度
  1. 若无上界限制,则可以考虑每个点会与所有点合并一次,时间复杂显然为 \(O(n^2)\)

  2. 若有上界限制记为 k,则时间复杂度为 \(O(nk)\)。证明看 do_while_true link

p

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/70377.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

VS2019/2022配置C++ OpenCV4.10.0环境

一、下载opencv4.10.0 官网链接:https://opencv.org/ 安装的时候记住安装路径,本人安装到E盘 二、新建C++项目 1、本人新建C++/CLR .Netframework项目 2、右击打开C++项目属性 2.1、添加包含目录 此处本人配置的是绝对地址,拷贝build文件夹到程序目录,然后配置相对地址方…

搜狗输入法ng版导入细胞词库过程的简要分析

今天有点时间,对deepin/uos上的搜狗输入法ng版导入细胞词库的行为做了一下分析。今天有点时间,对deepin/uos上的搜狗输入法ng版导入细胞词库的行为做了一下分析,过程如下: 1.在属性设置界面,用户选择.scel细胞词库文件,输入法对.scel的文件头进行验证,如果是 40 15 00 0…

花指令与anti-debug

花指令 anti-Debugptrace反调试 (1) ptrace系统调从名字上看是用于进程跟踪的,它提供了父进程可以观察和控制其子进程执行的能力,并允许父进程检查和替换子进程的内核镜像(包括寄存器)的值。其基本原理是: 当使用了ptrace跟踪后,所有发送给被跟踪的子进程的信号(除了SIGKILL),都…

禁止嵌套 iframe

vim /etc/nginx/nginx.conf 在:http 中加入:server { add_header X-Frame-Options "SAMEORIGIN"; } -----------------如:------------------------------------------ -------------------------------------------- 重启: cd /usr/sbin ./nginx -s relo…

诸多注解的作用

@Configuration标明这个类是一个配置类 @ComponentScan()用于设定扫描路径,此注解只能添加一次,多个注解用数组格式 @Scope注解是 Spring IOC 容器中的一个作用域,@Scope(singleton)标明为单例对象(默认也是单例),@Scope(prototype)标明为多例对象 影响Servlet生命周期的…

最终的方案

每个人维护一个歌单,建议一周一随,直接随出来几个歌单编号,由个人直接来决定最终歌曲,已经选过的歌单会等最后选完再重新计入。(两个机房的都可以贡献歌单) 现在建立新的歌单,曾经的那个仅供参考。 规则与上次相同。征求歌单!!! 原公告地址: 《公告》 CLOI在此向其…

南沙C++信奥赛陈老师解一本通题 1950:【10NOIP普及组】接水问题

​ 【题目描述】学校里有一个水房,水房里一共装有m个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为1。 现在有n 名同学准备接水,他们的初始接水顺序已经确定。将这些同学按接水顺序从1到n 编号,i号同学的接水量为w。接水开始时,1 到m 号同学各占一个水龙头,并同…

如何快速上手一个新项目?

前言 最近知识星球中有小伙伴问我:如何快速上手一个新项目? 这个问题是一个公共问题,估计很多换了公司的小伙都想问这个问题。 我在工作的这些年当中,换过几次工作,接手过同事的一些项目,需要经常上手一些不同类型的新项目。 今天这篇文章跟大家一起聊聊我的一些总结和思…