CF 1394 简要题解
最近都会做一些 \(\rm Div1\) 套题中 \(3000\) 分以下的题目。
A
直接枚举贪心即可。
B
首先不难发现总共可能的 \(c\) 序列只有 \(k!\) 种,很明显要暴力枚举所有情况然后快速判断。
不难发现,判定条件为原图中保留的边会将原图划分成若干个互不相交的简单环,换句话说:所有点的入度与出度均为 \(1\)。
注意到出度一定为 \(1\),只需判断所有点的入度为 \(1\) 即可。
于是可以得到一个 \(\mathcal{O(k!n)}\) 的做法,但实际上可以直接预处理出出度为 \(i\) 的点走出第 \(c_i\) 条边而每个点增加的入度,哈希直接判断即可。
复杂度 \(\mathcal{O(k!k + nk ^ 2)}\)。
实际上对于这类合法方案的计数问题,多数情况下会从找出合法的简单充要条件下手。对于复杂的情形,往往可以找出若干个必要条件组成充要条件。
C
可以发现,这些操作本质上是可以将 \(0 \ / \ 1\) 分别增加或减少 \(1\),或同时减少或增加 \(01\)。
但因为字串的连续性可能做不到随意删去 \(01\),只能从构造 \(t\) 串的角度使得能随意执行上述的本质操作。
不难发现只需要将 \(t\) 串构造成 \(1111 \cdots 00000\) 这种形式即可。
那么现在 \(s\) 距离 \(t\) 的大小就之和 \(s, t\) 中 \(0, 1\) 数量有关了。
于是问题可以转化为:给定 \(n\) 个二元组 \((x, y)\) 每次可以使得 \(x, y \pm 1\) 或 \(x, y\) 同时 \(\pm 1\),求一个二元组 \((x_0, y_0)\) 使得这 \(n\) 个二元组到此二元组最大距离最小。
不难发现可以二分答案大小,那么问题又可以转化为这 \(n\) 个二元组能在 \(L\) 次内到达的点中是否存在交集。
直接求交集是不好求的,不妨反过来,考虑一个二元组能到达的区域对 \(x_0, y_0\) 的限制,这样求交就很简单了。
具体地,可以描述为 \(x_0, y_0, x_0 - y_0\) 的上下界。
需要注意的是,\(t\) 不能为空串。
复杂度 \(\mathcal{O(n \log n)}\)。
对于这类操作性的问题,如果发现可以将操作简化或合并不失为一个好的选择。
同时,每当自己发现一条性质以后,一定要思考这个问题能否转化为一个本质相同的更为简单的问题,尝试用简化的语言描述这个得到的新问题。
注意该做法中区域求交的方式,这是一种通用做法。同时,如果出现二元组能进行两个维度的变化时,可以尝试放到坐标轴下更为直观地观察此问题。
D
首先,一条合法链的两种情况本质上是相同的,可以合并为一种:
不妨对于一条边 \((u, v)(b_u > b_v)\),看作是 \(u \rightarrow v\) 的一条有向边,那么一条合法链就是一条连续的有向链。
那么对于 \(b_u = b_v\) 的情况呢?不难发现其双向都可以,先不考虑这种情况。
继续观察可以发现,一个点对答案的贡献就是经过其的链数乘权值。那么对于 \(i \rightarrow u \rightarrow j\) 就能合并这两条边减少一次贡献,那么一个点对答案的贡献就是 \(\max(in_u, out_u) \times a_u\)。
接下来考虑 \(b_u = b_v\) 的情况,需要我们确定这种边的方向最小化总贡献。
可以发现,对于一个点 \(u\) 只关乎其儿子 \(v(b_u = b_v)\) 与其的边的方向,不妨设计一个 \(dp\),令 \(f_{u, 0 / 1}\) 表示 \(u\) 与其父亲的连边向下还是向上。
那么转移可以被刻画为一个新的问题:从每个二元组 \((a_i, b_i)\) 中选择一个元素出来,最终贡献为 \(\sum d_i + \max(c_0 + c_a, c_1 + c_b) \times a_u\) 其中 \(d\) 为选择的序列,\(c_0, c_1, c_a, c_b\) 分别代表选择的 \(a, b\) 个数及开始已经确定方向的选择个数。
因为变量过多,不妨枚举 \(c_0\) 的数量,那么此时 \(c_0, c_1, c_a, c_b\) 数量均已确定,问题近一步转化为:
从每个二元组 \((a_i, b_i)\) 中选择一个元素出来,恰好满足选择的 \(a, b\) 个数分别为 \(c_0, c_1\),最小化 \(\sum\limits_{i \in A} a_i + \sum\limits_{i \in B} b_i(|A| + |B| = m)\)
这是一个经典问题,即为最小化:\(\sum a_i + \sum\limits_{i \in B} b_i - a_i(|A| + |B| = m)\),只需选取最小的 \(c_1\) 个 \(b_i - a_i\) 即可。
复杂度 \(\mathcal{O(n \log n)}\)。
该做法的第一步将本质相同的合法状态合并成了一种,这种转化方式值得学习。
注意变量较多是可以枚举其中一个或若干个,逐个击破。
最后这个经典的问题告诉我们,将最优化问题写成一个式子,对答案进行变形转化所求。
CF 1394 简要题解的更多相关文章
- Noip 2014酱油记+简要题解
好吧,day2T1把d默认为1也是醉了,现在只能期待数据弱然后怒卡一等线吧QAQ Day0 第一次下午出发啊真是不错,才2小时左右就到了233,在车上把sao和fate补掉就到了= = 然后到宾馆之后 ...
- Tsinghua 2018 DSA PA2简要题解
反正没时间写,先把简要题解(嘴巴A题)都给他写了记录一下. upd:任务倒是完成了,我也自闭了. CST2018 2-1 Meteorites: 乘法版的石子合并,堆 + 高精度. 写起来有点烦貌似. ...
- Codeforces 863 简要题解
文章目录 A题 B题 C题 D题 E题 F题 G题 传送门 简要题解?因为最后一题太毒不想写了所以其实是部分题解... A题 传送门 题意简述:给你一个数,问你能不能通过加前导000使其成为一个回文数 ...
- HNOI2018简要题解
HNOI2018简要题解 D1T1 寻宝游戏 题意 某大学每年都会有一次 Mystery Hunt 的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得这一年出题的机会. 作为 ...
- JXOI2018简要题解
JXOI2018简要题解 T1 排序问题 题意 九条可怜是一个热爱思考的女孩子. 九条可怜最近正在研究各种排序的性质,她发现了一种很有趣的排序方法: Gobo sort ! Gobo sort 的算法 ...
- BJOI2018简要题解
BJOI2018简要题解 D1T1 二进制 题意 pupil 发现对于一个十进制数,无论怎么将其的数字重新排列,均不影响其是不是 \(3\) 的倍数.他想研究对于二进制,是否也有类似的性质. 于是他生 ...
- CQOI2018简要题解
CQOI2018简要题解 D1T1 破解 D-H 协议 题意 Diffie-Hellman 密钥交换协议是一种简单有效的密钥交换方法.它可以让通讯双方在没有事先约定密钥(密码)的情况下,通过不安全的信 ...
- AtCoder ExaWizards 2019 简要题解
AtCoder ExaWizards 2019 简要题解 Tags:题解 link:https://atcoder.jp/contests/exawizards2019 很水的一场ARC啊,随随便便就 ...
- Comet OJ - Contest #2 简要题解
Comet OJ - Contest #2 简要题解 cometoj A 模拟,复杂度是对数级的. code B 易知\(p\in[l,r]\),且最终的利润关于\(p\)的表达式为\(\frac{( ...
随机推荐
- 贪心学院计算机视觉CV训练营
贪心学院计算机视觉CV训练营 任务 Notes 其他 任务1:机器学习.深度学习简介 Note1 任务2:深度学习的发展历史 Note2 任务3:现代深度学习的典型例子 Note3 任务4:深度学习在 ...
- <学习opencv>图像变换
拉伸.收缩.扭曲和旋转 统一调整大小 我们经常会遇到一些我们希望转换为其他尺寸的图像. 我们可能想要扩大或缩小图像; 这两项任务都是由同一个功能完成的. cv::resize() 该cv::resiz ...
- 替代RTD2166|CS5212直接Pin to pin兼容替代RTD2166|替代RTD2166方案
RTD2166功能概述 RTD2166是一款DisplayPort端口到VGA转换器,成本较高,Capstone于2019年推出CS5212,直接Pin to pin兼容替代RTD2166,可用原RT ...
- 使用 JavaScript 根据消费金额和消费者是否为会员确定折扣,最终核算实际应该支付的金额
查看本章节 查看作业目录 需求说明: 根据消费金额和消费者是否为会员确定折扣,最终核算实际应该支付的金额 消费金额在 200 元以上的会员折扣是 7.5 折,消费金额没有达到 200 元的会员折扣是 ...
- 编写Java程序,创建一个数学工具类,将该类设计为final类,Final 修饰符的使用。
返回本章节 返回作业目录 需求说明: 创建一个数学工具类. 将该类设计为final类. 将该类的构造方法的访问权限定义为私有,以防止外界实例化该类. 在该类定义静态double类型常量π,其值为3.1 ...
- Notepad++在线安装使用JSON插件
1.介绍 JSON Viewer是Notepad++的JSON插件, Notepad++的Plugins Admin可以安装管理插件, 它不仅可以格式化JSON字符串, 还可以打开JSON查看器查看结 ...
- Java CAS 原理详解
1. 背景 在JDK 5之前Java语言是靠 synchronized 关键字保证同步的,这会导致有锁.锁机制存在以下问题: 在多线程竞争下,加锁.释放锁会导致比较多的上下文切换和调度延时,引起性能问 ...
- CVE-2020-0786(永恒之黑) GetShell
描述 Microsoft服务器消息块3.1.1(SMBv3)协议处理某些请求的方式中存在一个远程执行代码漏洞,也称为" Windows SMBv3客户端/服务器远程执行代码漏洞". ...
- 《剑指offer》面试题03. 数组中重复的数字
问题描述 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中 ...
- 自从学会了VBA字典,VLOOKUP都不那么香了
上篇博文中,小爬曾多次为VBA字典带货.鼓励多用字典,可以让我们的VBA脚本工具执行更快.今天小爬来细聊一下VBA字典的具体应用!如果你有一定VBA基础,那么看完你一定会对VBA字典有全新的认识:如果 ...