暑假刷题记 B
动态规划
字符串
杂题
A:Animals and Puzzle
B:Vanya and Treasure
根号分治。
实际上是从 \((1, 1)\) 先找一个 \(1\),再找一个 \(2\dots\) 最后找一个 \(p\) 然后
依次按最短路走过去。
我们有两种想法, 直接 BFS 递推得到当前点到所有点的距离 或者 直接暴力枚举两个层之间的所有点对, 两种做法的时间复杂度 都是 \(O(n^2 m^2)\)。
考虑缝合, 经过一番神秘的复杂度分析, 我们得到了 \(O(nm \sqrt{nm})\) 的优秀算法。
D:Awesome Substrings
根号分治。
令 \(s_i\) 表示 \(\sum\limits_{1}^{i}a_i\), 且 枚举的倍数为 \(d\), 则有 \(r - l = d \times (s_r - s_l)\)。
直接暴力做是 \(O(n^2)\), 且不好优化。 我们考虑分块计算的思想, 设阈值为 \(T\)。
当 \(d \in [1, T]\) 时, 将原式变形可得 \(d \times s_r - r = d \times s_l - l\), 我们设 \(f(i, d) = d \times s_i - i\), 对于每个 d 可以求出 $ f(0...n, d)$ 的值。 对于每个值 \(x\),若有 \(k\) 个 \(i\) 满足 \(f(i, d) = x\), 它都会对答案产生 \(\tbinom{k}{2}\) 的贡献。 这一部分可以做到 \(O(nT)\) 的实现。
当 \(d \in (T, n]\) 时, 将原式变形可以得到 \(s_r - s_l = \dfrac{r - l}{d} < \dfrac{n}{d}\) , 即有贡献的 \((a, b)\) 对应的区间中 \(1\) 的个数 \(k < \dfrac{n}{d}\)。 因此我们对于每个 \(l, k\) 找到 \(r\) 的范围, 其对答案的贡献为 \(\lfloor \dfrac{r - i}{k} \rfloor - \lfloor \dfrac{l - i}{k} \rfloor\) , 再减去 \(d \le T\) 的部分。 这一部分可以做到 \(O(n\frac{n}{T})\)
总时间复杂度为 \(O(nT + n\frac{n}{T})\), 当 \(T = \sqrt{n}\) 时最优。
E:PolandBall and Gifts
若将送别人礼物看做一条有向边, 那么排列 p 所形成的是 一些闭合的有向环。 一个人收到礼物当且仅当一条有向边所连接的两个人都带了礼物。
先考虑最大化。 假定环的大小为 k, 对于一个奇环, 当有 \(\dfrac{k + 1}{2}\) 个人不带礼物时, 这 k 个人收不到礼物; 对于一个偶环, 当有 \(\dfrac{k}{2}\) 个人不带礼物时, 这 k 个人收不到礼物。
一个不带礼物的人最多可以影响两个人, 我们考虑尽量使每个不带礼物的人的影响最大。 而对于任意环, 只需要 \(\lfloor \frac{k}{2} \rfloor\) 个不带礼物的人即可将 可以影响两个人的点位 占满。 我们令 \(ans2 = \sum\limits{\lfloor \dfrac{siz[i]}{2} \rfloor}\), \(siz[i]\) 表示环的大小。 当 \(ans2 >= m\) 时, 每个不带礼物的人都能占据一个 影响两个人的点位;
否则的话, 剩余的人就占据奇环上只能影响一个人的点位。
再考虑最小化。 对于一个大小为 \(k\) 的环, 当环上有 \(k\) 个不带礼物的人 与 有 \(k - 1\) 个不带礼物的人都只会造成 \(k\) 个人得不到礼物。 故而, 将一个环完全占满更优。 原题即转化为 判断是否能找到几个环 使 他们的大小和 为 \(m\), 如果能, 答案即为 \(m\), 否则的话, 否则,忘带礼物的人的形式就是若干个环加上一条链,而这条链的尾部会有一个虽然带了礼物,但是收不到礼物的人。所以答案就是 \(m + 1\)。
F:Nastya and Time Machine
构造。
不难发现, 经过节点次数的下界是所有节点的度数的最大值(类比于菊花)。 如何构造出满足下界的答案?
为了方便构造,若进入节点 \(x\) 的时间点为 \(t_x\),则离开节点 \(x\) 的时间点必须为 \(t_x - 1\) (这样返回节点 x 的父节点时间点就为 \(t_x\))
在遍历节点 x 的所有子节点时可能会有如下两种情况:
\(t_x + deg_x < maxdeg\) 则过程中不会超过答案,只需遍历结束后将时间回到 \(t_x - 1\) 即可。
\(t_x + deg_x \ge maxdeg\) 过程中会有某一个节点的时间点超过答案。因为总共会占用 \(deg_x + 1\) 个时间点,因此当过程中的标号达到 maxdeg 时只需回到 \(maxdeg − deg_x\) 的时间点即可。
G:Andryusha and Nervous Barriers
直接正向模拟很困难, 考虑从另一个角度解题。
我们可以将板子看成从高到低依次插入得到的, 这样的话, 我们可以不用在意板子 和 球的高度, 只需关注他们的横坐标即可。
那么此时, 一个板子的作用实际上是 求出 一定区间中球的个数 \(x\), 并使区间两端点 \(+x\), 将区间(除去端点)赋值为 \(0\) 。
考虑到球在一定高度下落可能会砸碎板子这一因素, 我们对于不同组的球再记录一个参数 表示他们下降的高度, 用 优先队列 来对高度进行排序。
我们考虑设计一个函数, 询问一定区间内所有 不足以砸碎当前板子的球的个数。 由于对每个横坐标不同的点都需要查找一次优先队列, 时间复杂度过高。
考虑维护一个变量记录区间最小值, 当区间最小值大于 坚固程度时直接返回, 这样和区间取模类似, 在数据随机条件下时间复杂度有保证。
H:Omkar and Landslide
结论题。
对山的调整顺序并不影响最终的结果, 且停止时有 \(h_{i + 1} - h_i \in \{0, 1\}\)。
可以证明, 停止时 \(h_{i + 1} - h_i\) 最多有一个为 \(0\), 其他的为 \(1\)。
这样的话, 对于一个 n 和 h, 就可以直接确定最终的答案。
J:Goodbye Souvenir
首先, 由于区间中一种数只会计算一次贡献, 那么我们要求的 \(last_x - first_x = \sum\limits_{i \in [L, R]}^{a[i] = x} i - pre_i\), 这是因为对于中间的部分而言, 令 \(j\) 为下一个位置满足 \(a[j] = x\) 的下标, 则 \(pre_j = i\), 那么 \(i - pre_i + j - pre_j = j - pre_i\)
那么此时, 我们可以具化出两个不等式, \(i \le R\) , \(pre_i \ge L\), 在加入一个时间轴, 即三维偏序。
具体的, 我们有 \(set\) 来维护每个值的前缀, 修改一个数时需要修改以当前数为前缀 数据。
K:Sources and Sinks
Q:Omkar and Time Travel
暑假刷题记 B的更多相关文章
- AGC刷题记
已经刷不了几天了... AGC001 A-BBQ Easy 排个序就过了 B-Mysterious Light 手膜一下,你会发现魔改一下\(gcd\)就行了 C-Shorten Diameter 刚 ...
- PE刷题记
PE 中文翻译 最喜欢做这种很有意思的数学题了虽然数学很垃圾 但是这个网站的提交方式好鬼畜啊qwq 1.Multiples of 3 and 5 直接枚举 2.Even Fibonacci numbe ...
- ctfshow之Web入门刷题记(从89开始,持续更新)
0x01Web89-99PHP特性payload Web89 include("flag.php"); highlight_file(__FILE__); if(isset($_G ...
- 暑假前的flag
暑假到了,为了简便新开了一个博客,供暑假刷体放一些题解,玩acm1年多了,cf还是蓝名,真是菜的一笔,明年就大三了,马上就要毕业了,然而还是啥也不会,兼职和智障没什么两样,当初大一吹的牛逼说要成为学校 ...
- ACM退役记&&回忆录
ACM退役记 2017.9.19星期二,"九一八事变"八十六年后的第二天,永远记住这个日子,刚好是我报名ACM到现在,刚好满一年,而今天正是我注册杭州电子科技大学OJ的时间(就是这 ...
- USACO 完结的一些感想
其实日期没有那么近啦……只是我偶尔还点进去造成的,导致我没有每一章刷完的纪念日了 但是全刷完是今天啦 讲真,题很锻炼思维能力,USACO保持着一贯猎奇的题目描述,以及尽量不用高级算法就完成的题解……例 ...
- DS博客作业08--课程总结
DS博客作业08--课程总结 1.当初你是如何做出选择计算机专业的决定的? 1.1 经过一年学习,你的看法改变了么,为什么? 1.2 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗? 为什么? 1. ...
- 图论初步-Tarjan算法及其应用
暑假刷了一堆Tarjan题到头来还是忘得差不多. 这篇博客权当复习吧. 一些定义 无向图 割顶与桥 (划重点) 图G是连通图,删除一个点表示删除此点以及所有与其相连的边. 若删除某点u后G不再连通,那 ...
- Flask+pin
Flask+SSTI的新火花 记一次buu刷题记和回顾祥云杯被虐出屎的经历.题目:[GYCTF2020]FlaskApp 一 题目初见 朴实无华的页面,一个base64的小程序页面 看到有提示. 我就 ...
- 【密码学】CBC反转字节攻击
前言 暑假刷安全牛的课,看视频有点够了,想做点题,选择了实验吧,结果上来就整懵了 web题,牵扯到了CBC反转字节攻击,密码学!? 查阅资料,学习一下 CBC加解密 CBC 模式中会先将明文分组与前一 ...
随机推荐
- AppScan-使用入门
一.介绍 AppScan是IBM公司出的一款Web应用安全测试工具,采用黑盒测试的方式,可以扫描常见的web应用安全漏洞 工作原理 首先是根据起始页爬取站下所有可见的页面,同时测试常见的管理后台 获得 ...
- percona-server-rocksdb-8.0.32 安装
MyRocks是关系型数据库Mysql 基于RocksDB 的存储引擎,一个可嵌入的.持久的键值存储.Percona MyRocks 是集于 Percona Server for MySQL的. Ro ...
- redis内存突然暴增,排查思路是什么
1 这种暴增的应该还是上次一个群友说的,更多可能是外部因素导致的,应用新上线,定时任务这些,再有就是cat上查是哪些指令多,以及比对和之前的时间的差异 看是否有定时任务 或者 新上线的活动 ,在看下监 ...
- 2023-02-12:给定正数N,表示用户数量,用户编号从0~N-1, 给定正数M,表示实验数量,实验编号从0~M-1, 给定长度为N的二维数组A, A[i] = { a, b, c }表示,用户i报
2023-02-12:给定正数N,表示用户数量,用户编号从0~N-1, 给定正数M,表示实验数量,实验编号从0~M-1, 给定长度为N的二维数组A, A[i] = { a, b, c }表示,用户i报 ...
- 2021-01-30:redis中,Pipeline有什么好处?
福哥答案2021-01-30:可以将多次 IO 往返的时间缩减为一次,减少多次IO延迟的开销.前提是 pipeline 执行的指令之间没有因果相关性. 多个指令之间没有依赖关系,可以使用 pipeli ...
- 2022-01-20: 矩形区域不超过 K 的最大数值和。 给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。 题目数据保证总会存在一
2022-01-20: 矩形区域不超过 K 的最大数值和. 给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和. 题目数据保证总会存在一 ...
- vue全家桶进阶之路6:Vue的安装以及js引入
1.安装 注意:Vue 不支持 IE8 及以下版本 创建一个文件夹用于下载引入Vue D:\BaiduSyncdisk\vue2 按照最新版本的Vue npm install vue 创建完成后便可以 ...
- NeoVim 学习笔记
NeoVim 学习笔记 这篇学习笔记将用于记录本人在学习使用 NeoVim 编辑器过程中所编写的学习心得与代码.该笔记将会存放在https://github.com/owlman/study_note ...
- 3、数据库:Oracle部署 - 系统部署系列文章
Oracle数据库的安装,以前写过一篇,这次将新版的安装再记录一次,让读者能够有所了解,笔者也能够记录下最新版的安装过程. 一.数据库下载: Oracle最新版目前在官网是19c,从下面这个链接进去下 ...
- 在 Linux 上给用户赋予指定目录的读写权限
在 Linux 上指定目录的读写权限赋予用户,有两种方法可以实现这个目标:第一种是使用 ACL (访问控制列表),第二种是创建用户组来管理文件权限,下面会一一介绍.为了完成这个教程,我们将使用以下设置 ...