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{( ...
随机推荐
- 论文翻译:2019_Deep Neural Network Based Regression Approach for A coustic Echo Cancellation
论文地址:https://dl.acm.org/doi/abs/10.1145/3330393.3330399 基于深度神经网络的回声消除回归方法 摘要 声学回声消除器(AEC)的目的是消除近端传声器 ...
- [Git]解决Permission denied, please try again问题
在gitlab上传项目的时候出现Permission denied, please try again问题, 网上有很多解释,但是都没能解决我的问题,后来经过自己尝试成功了,这里把经验分享给大家. 在 ...
- CS5216PIN TO PIN替换PS8402A方案|PS8402A电路设计原理图|CS5216芯片
PS8402A是HDMI 电平移位器/中继器专为2型双模Display Port(DP++)电缆适配器应用而设计.它设计用于Display Port到DVI或Display Port到HDMI的2型适 ...
- Capstone CS5213|HDMI转VGA|CS5213设计参考电路
Capstone CS5213是一款HDMI到VGA转换器结合了HDMI输入接口和模拟RGB DAC输出且带支持片上音频数模转换器.CS5213芯片设计简单,整体芯片尺寸精悍,外围电路集成优化度较高, ...
- Java Web程序设计笔记 • 【第1章 Web应用程序】
全部章节 >>>> 本章目录 1.1 Web 应用程序 1.1.1 Web 应用程序概述 1.1.2 Web 应用程序的工作原理 1.1.3 实践练习 1.2 HTTP协议 ...
- 初识python 之 爬虫:爬取中国天气网数据
用到模块: 获取网页并解析:import requests,html5lib from bs4 import BeautifulSoup 使用pyecharts的Bar可视化工具"绘制图表& ...
- linux光标命令快捷键(常用)
Ctrl+a 移动到首行 Ctrl+e 移动到尾行 Ctrl+u 将当前光标后面的内容全部删除 (剪辑) ctrl+k 将当前光标前面的内容全部删除 (剪辑) Ctrl+→(左右同理) 移动到下个空格 ...
- 自定义异步爬虫架构 - AsyncSpider
作者:张亚飞 山西医科大学在读研究生 1. 并发编程 Python中实现并发编程的三种方案:多线程.多进程和异步I/O.并发编程的好处在于可以提升程序的执行效率以及改善用户体验:坏处在于并发的程序不容 ...
- Vue项目中使用websocket
<template> <div class="test"> </div> </template> <script> ex ...
- Kubernetes 中的 Pod 安全策略
来源:伪架构师作者:崔秀龙很多人分不清 SecurityContext 和 PodSecurityPolicy 这两个关键字的差别,其实很简单:•SecurityContext 是 Pod 中的一个字 ...