最近都会做一些 \(\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 简要题解的更多相关文章

  1. Noip 2014酱油记+简要题解

    好吧,day2T1把d默认为1也是醉了,现在只能期待数据弱然后怒卡一等线吧QAQ Day0 第一次下午出发啊真是不错,才2小时左右就到了233,在车上把sao和fate补掉就到了= = 然后到宾馆之后 ...

  2. Tsinghua 2018 DSA PA2简要题解

    反正没时间写,先把简要题解(嘴巴A题)都给他写了记录一下. upd:任务倒是完成了,我也自闭了. CST2018 2-1 Meteorites: 乘法版的石子合并,堆 + 高精度. 写起来有点烦貌似. ...

  3. Codeforces 863 简要题解

    文章目录 A题 B题 C题 D题 E题 F题 G题 传送门 简要题解?因为最后一题太毒不想写了所以其实是部分题解... A题 传送门 题意简述:给你一个数,问你能不能通过加前导000使其成为一个回文数 ...

  4. HNOI2018简要题解

    HNOI2018简要题解 D1T1 寻宝游戏 题意 某大学每年都会有一次 Mystery Hunt 的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得这一年出题的机会. 作为 ...

  5. JXOI2018简要题解

    JXOI2018简要题解 T1 排序问题 题意 九条可怜是一个热爱思考的女孩子. 九条可怜最近正在研究各种排序的性质,她发现了一种很有趣的排序方法: Gobo sort ! Gobo sort 的算法 ...

  6. BJOI2018简要题解

    BJOI2018简要题解 D1T1 二进制 题意 pupil 发现对于一个十进制数,无论怎么将其的数字重新排列,均不影响其是不是 \(3\) 的倍数.他想研究对于二进制,是否也有类似的性质. 于是他生 ...

  7. CQOI2018简要题解

    CQOI2018简要题解 D1T1 破解 D-H 协议 题意 Diffie-Hellman 密钥交换协议是一种简单有效的密钥交换方法.它可以让通讯双方在没有事先约定密钥(密码)的情况下,通过不安全的信 ...

  8. AtCoder ExaWizards 2019 简要题解

    AtCoder ExaWizards 2019 简要题解 Tags:题解 link:https://atcoder.jp/contests/exawizards2019 很水的一场ARC啊,随随便便就 ...

  9. Comet OJ - Contest #2 简要题解

    Comet OJ - Contest #2 简要题解 cometoj A 模拟,复杂度是对数级的. code B 易知\(p\in[l,r]\),且最终的利润关于\(p\)的表达式为\(\frac{( ...

随机推荐

  1. Windows11实现录屏直播,H5页面直播 HLS ,不依赖Flash

    这两天的一个小需求,需要实现桌面实时直播,前面讲了两种方式: 1.Windows 11实现录屏直播,搭建Nginx的rtmp服务 的方式需要依赖与Flash插件,使用场景有限 2.Windows 11 ...

  2. RabbitMQ学习笔记三:Java实现RabbitMQ之与Spring集成

    搭建好maven项目环境,加入RabbitMQ依赖包 <dependency> <groupId>org.springframework.amqp</groupId> ...

  3. Adversarially Robust Generalization Requires More Data

    目录 概 主要内容 高斯模型 upper bound lower bound 伯努利模型 upper bound lower bound Schmidt L, Santurkar S, Tsipras ...

  4. 如何优雅地读写HttpServletRequest和HttpServletResponse的请求体

    最近很多交互要同原生的HttpServletRequest和HttpServletResponse打交道.从HttpServletRequest中读取body数据封装成某种数据结构:向HttpServ ...

  5. 使用 IE 或Chrome等浏览器,通过网络抓包的形式,查看发送请求时的网络

    要求: 使用 IE 或Chrome等浏览器,通过网络抓包的形式,查看发送请求时的网络 实现步骤: 1.打开 IE 浏览器,选择"开发者工具",切换到"网络"标签 ...

  6. Hadoop问题解决记录

    # 1.解决Unable to load native-hadoop library for your platform告警 安装Hadoop启动之后总有警告:Unable to load nativ ...

  7. django 项目中使用markdown编辑器

     第一步: 修改models.py文件下要显示字段的类型为TextField 第二步:运行命令: python manage.py makemigrations 和 python manage.py ...

  8. 微服务架构攀登之路(五)之Go-micro入门

    一.go-micro入门 1. go-micro 简介 Go Micro 是一个插件化的基础框架,基于此可以构建微服务,Micro 的设计哲学是可插拔的插件化架构 在架构之外,它默认实现了 consu ...

  9. STM32新建模板之寄存器

    创建寄存器的项目模板相对比较简单,这里是基于库文件的模板进行更改的,有不明白的小伙伴可以浏览STM32新建模板之库文件. 一.项目文件 拷贝库文件的工程模板重命名为"stm32f10x_re ...

  10. Docker的学习笔记(一)基础知识

    概述 本人最近在学习docker相关的知识,既是工作本身的需要也是自己对技术的追求的必要,以后我也会推出容器相关的随笔,既可以增长自己的知识,也可以和读者广泛交流,岂不乐乎?话不多说.第一篇先介绍do ...