Codeforces Round #848 (Div. 2) A-E 赛时思路+正解

news2024/11/16 6:27:38

青大蒟蒻第一次在正式的 d i v 2 div2 div2 A c Ac Ac了五道题,也是小蒟蒻有史以来发挥最好的一场,这场过后我的cf也许可能也要变成黄了。

A. Flip Flop Sum
题意:给定一个 a —— i a——i a——i数组,权值仅为1或-1,我们选择相邻两位并翻转(1变-1,-1变1),能够得到的最大和是多少, n < = 2 e 5 n <= 2e5 n<=2e5
思路:暴力枚举所有的相邻位并翻转找最大和即可。
代码

B. The Forbidden Permutation
题意:给定一个长度为 n n n排列数组 p p p , 给你长度为 m m m且元素互不相同的数组 a a a,一个数组是坏的当且仅当所有的 1 < = i < m 1 <= i < m 1<=i<m满足 p o s ( a i ) < p o s ( a ( i + 1 ) ) < p o s ( a i ) + d pos(a_i) < pos(a_(i_+1_)) < pos(a_i) + d pos(ai)<pos(a(i+1))<pos(ai)+d p o s ( x ) pos(x) pos(x)表示 x x x值在 a a a数组的位置,现可以执行以下操作,我们可以交换 p p p数组的相邻项,求执行多少次操作我们可以让 a a a数组是好的, n < = 2 e 5 , m < = 2 e 5 , a i < = n n <= 2e5 , m <= 2e5 ,a_i <= n n<=2e5,m<=2e5ai<=n
思路 只要破坏坏数组的条件即可,我们发现他要求的是所有的相邻位置都要满足,我们考虑有一个不满足的最小代价即可,分两种情况考虑,考虑 a ( i + 1 ) a(i+1) a(i+1)移动到 a ( i ) a(i) a(i)前面或者 a ( i + 1 ) a(i+1) a(i+1)移动到 a ( i ) + d a(i) + d a(i)+d后面,代价去最小值即可。
代码

C. Flexible String
题意:给你两个长度为 n n n的字符串 a a a b b b,我们把价值定义为 ( l , r ) (l , r) (l,r)对满足要求的个数 ( l < = r , l > = 1 , r < = n ) (l <= r , l >= 1 , r <= n) (l<=r,l>=1,r<=n),满足要求当且仅当 a ( l , r ) = = b ( l , r ) a(l , r) == b(l , r) a(l,r)==b(l,r)a字符串的l到r的子串和b字符串的l到r的子串相同。
我们定义一个 Q Q Q堆,我们可以执行以下操作,我们可以将 a a a字符串的 a i a_i ai放到 Q Q Q堆里,然后将 a i a_i ai替换成任意字符 c c c, Q Q Q堆中不同的字符串不能超过 k k k种,求字符串经过若干次操作后的最大价值,题目保证字符串 a a a b b b出现的字符串种类不超过10, k < = 10 , n < = 2 e 5 k <= 10 , n <= 2e5 k<=10,n<=2e5
思路:考虑对10进行二进制枚举,枚举所有的合法状态,求出对应状态的字符串的最大价值即可。时间复杂度 O ( 2 k ∗ n ) O(2 ^k * n) O(2kn)
代码

D. Flexible String Revisit
题意:给你两个长度为 n n n的二进制字符串 a a a b b b,字符串的取值只有 0 、 1 0、1 01 , 我们每一次操作可以随机选择一个下标 i i i,然后把 a i ai ai取反 ( 0 变 1 , 1 变 0 ) (0 变 1 , 1 变 0) (0110),问把这两个字符串变相同所需的操作期望次数。

思路:考虑转化一下问题,把问题变成 a i ai ai b i bi bi相同的个数为 k k k,不相同的个数可以推得为 n − k n-k nk
然后我们把 a i ai ai b i bi bi相同的个数为 k k k称为状态 k k k,我们考虑由状态 k k k到状态 n n n的期望操作 d p [ k ] dp[k] dp[k]次。
1.操作一次,我们选择了 a i ai ai b i bi bi相同里面的下标,由于之前是相同的,取反后变为不相同的,那么状态转移到了状态 k − 1 k-1 k1
2.操作一次,我们选择了 a i ai ai b i bi bi不相同里面的下标,由于取反所以不相同的下标变为了相同的下标,转移到了状态 k + 1 k+1 k+1
可以推出式子为: d p [ k ] = 1 + k / n ∗ d p [ k − 1 ] + ( n − k ) / n ∗ d p [ k + 1 ] dp[k] = 1 + k/n * dp[k - 1] + (n-k)/n * dp[k+1] dp[k]=1+k/ndp[k1]+(nk)/ndp[k+1]
观察一下这个式子,我们发现式子中出线了 d p [ k − 1 ] 和 d p [ k + 1 ] dp[k - 1] 和 dp[k + 1] dp[k1]dp[k+1],这样的式子是没法求出答案的。

我们考虑转化角度,我们考虑从状态 k k k到状态 k + 1 k + 1 k+1所需的期望操作 d p [ k ] dp[k] dp[k]次,答案就为 d p [ k ] dp[k] dp[k] m m m n − 1 n-1 n1的和,原因是 m m m变到 n n n,我们先花费 d p [ m ] dp[m] dp[m]变成 m + 1 m+1 m+1,再花费 d p [ m + 1 ] dp[m+1] dp[m+1]变成 m + 2 m+2 m+2…以此类推花费 d p [ n − 1 ] dp[n-1] dp[n1]变到 n n n
考虑状态转移。
1.操作一次,我们选择了 a i ai ai b i bi bi不相同里面的下标,由于取反所以不相同的下标变为了相同的下标,转移到了状态 k + 1 k+1 k+1,操作次数为1。
2…操作一次,我们选择了 a i ai ai b i bi bi相同里面的下标,由于之前是相同的,取反后变为不相同的,那么状态转移到了状态 k − 1 k-1 k1,我们从状态 k − 1 k-1 k1变到 k + 1 k+1 k+1需要经历 d p [ k − 1 ] dp[k-1] dp[k1]次操作变成状态 k k k,再经历 d p [ k ] dp[k] dp[k]次操作变成状态 k + 1 k+1 k+1,操作次数为 1 + d p [ k − 1 ] + d p [ k ] 1 + dp[k - 1] + dp[k] 1+dp[k1]+dp[k]
式子就变为: d p [ k ] = ( n − k ) / n + k / n ∗ ( 1 + d p [ k − 1 ] + d p [ k ] ) dp[k] = (n - k)/n + k/n * (1 + dp[k - 1] + dp[k]) dp[k]=(nk)/n+k/n(1+dp[k1]+dp[k])
考虑化简,化简过程如下:
在这里插入图片描述

最后式子变为 d p [ k ] = n / ( n − k ) + k / ( n − k ) ∗ d p [ k − 1 ] dp[k] = n / (n - k) + k / (n - k) * dp[k - 1] dp[k]=n/(nk)+k/(nk)dp[k1]
转移这个式子即可,初始值 d p [ 0 ] = 1 dp[0]=1 dp[0]=1,因为由0转移到1一定是一次,因为相同的为空,只能从不相同的选,然后求 m − ( n − 1 ) m - (n -1) m(n1) d p [ k ] dp[k] dp[k]和即可。
代码

E. The Tree Has Fallen!
题意:给你一棵大小为 n n n的树,每个点有权值 a i ai ai,有 q q q次询问,每次询问问以 r r r为根,在 u u u子树中选若干个点使得这些点的权值异或和最大,输出这个最大异或和。
思路:考虑离线,我们把询问都变成问 r r r为根, u u u子树的最大异或和的形式,然后我们两遍 d f s dfs dfs,第一遍 d f s dfs dfs维护以1为根的 s z [ u ] sz[u] sz[u]的最大异或和(线性基),第二遍 d f s dfs dfs类似换根 d p dp dp的思路维护以 u u u为根的其他节点子树的最大异或和(线性基) ,然后离线地处理所有询问。
原理:两个子树为根的所有维护的子树信息,唯一不同的地方是两个子树之间的路径信息(有根树的方向不一样),然后我们可以考虑先维护1子树的信息,然后用 d f s dfs dfs特性(可以维护路过的路径信息)去解决问题即可。
往后会更新原理的图文方便理解,线性基合并是基本内容,暂且不在这里细讲。
代码

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

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

相关文章

《死亡空间》重制回归!无法启动怎么办?

作为科幻生存恐怖系列的经典之作&#xff0c;《死亡空间》在推出15年后再次回归&#xff0c;果然引发热潮。精美震撼的科幻场景&#xff0c;强烈的视觉画面&#xff0c;加上阴森的3D 音效&#xff0c;重制版提升了身临其境之感&#xff0c;完全是沉浸式恐怖体验&#xff0c;只能…

红外遥控数码管显示

红外遥控器实物图红外遥控器接口电路数码管接口电路红外遥控数码管显示程序源代码/**************************红外遥控数码管显示************************** * 单片机&#xff1a;51单片机* 开发环境&#xff1a;keil * 名称:红外遥控数码管显示 * 功能&#xff1a;遥控器红外…

C语言常量

常量是固定值&#xff0c;在程序执行期间不会改变。这些固定的值&#xff0c;又叫做字面量。常量可以是任何的基本数据类型&#xff0c;比如整数常量、浮点常量、字符常量&#xff0c;或字符串字面值&#xff0c;也有枚举常量。常量就像是常规的变量&#xff0c;只不过常量的值…

OpenMMLAB AI实战营第一课笔记

计算机视觉的发展 计算机视觉是什么 计算机视觉是一门让计算机学会"看"的学科&#xff0c;研究如何自动理解图像和视频中的内容 计算机视觉的发展 早期萌芽&#xff08;1960-1980&#xff09; 统计机器学习与模式识别(1990-2000) ImageNet 大型数据库(2006) 斯坦…

ocelot+consul治理服务

consulConsul 是HashiCorp公司推出的开源工具&#xff0c;用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案相比&#xff0c;Consul的方案更“一站式”&#xff0c;内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方…

程序员副业接单做私活避坑指南

这篇文章系统的分享了对接单做私活这件事情的思考&#xff0c;也给出一些干货建议。希望让大家少走一些弯路&#xff0c;不要被坑。 先说结论 不建议大家在接单这个事情上投入太大精力&#xff0c;如果你“贼心不改”&#xff0c;建议大家以比较随缘的方式对待这件事情。 再说…

Linux云主机配置

Linux云主机配置 推荐环境&#xff1a; Mac 阿里云主机Linux 阿里云主机Windows Xshell 阿里云主机&#xff08;选择使用&#xff09;Windows 虚拟机 阿里云主机 1.云主机配置 选择配置的过程中&#xff0c;请注意选择操作系统版本为Ubuntu 16.04 64位 或 Ubuntu 18.04 6…

多位大厂专家鼎力推荐,44个微服务架构设计模式pdf,程序员福利

前言 本文的目标是让架构师和程序员学会使用微服务架构成功开发应用程序。 本文不仅讨论了微服务架构的好处&#xff0c;还描述了它们的弊端。读者将掌握如何在使用单体架构和使用微服务架构之间做出正确的权衡。 谁应该阅读本文&#xff1f; 本文的重点是架构和开发&#…

前端vue2实现头部组件(自定义背景icon+抽屉式使用指南展示)

一、文章引导 #mermaid-svg-Sqlx5Ih7pUPfo8rw {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Sqlx5Ih7pUPfo8rw .error-icon{fill:#552222;}#mermaid-svg-Sqlx5Ih7pUPfo8rw .error-text{fill:#552222;stroke:#55222…

Python多态及用法详解

Python 是弱类型语言&#xff0c;其最明显的特征是在使用变量时&#xff0c;无需为其指定具体的数据类型。这会导致一种情况&#xff0c;即同一变量可能会被先后赋值不同的类对象&#xff0c;例如&#xff1a;class CLanguage: defsay(self): print("赋值的是 CLanguage 类…

ElasticSearch从入门到出门【下】

文章目录数据聚合聚合的种类DSL实现聚合Bucket聚合语法聚合结果排序限定聚合范围Metric聚合语法RestAPI实现聚合API语法业务需求业务实现自动补全拼音分词器自定义分词器自动补全查询实现酒店搜索框自动补全修改酒店映射结构修改HotelDoc实体重新导入自动补全查询的JavaAPI实现…

阿里云领取免费2H2G云服务器&证书分享&个税抵扣:Apsara Clouder云计算专项技能认证:云服务器ECS入门

这个证书是你领服务器一个月内要考的&#xff0c;内容也不难。下面是90分左右的答案&#xff08;粗体&#xff09;&#xff0c;仅供参考……单选1&#xff0e;云服务器ECS以服务化的方式对客户提供&#xff0c;阿里云产品售后支持的时间段是&#xff1f;A.5*8B.7*8C.7*12D.7*24…

《MySQL高级篇》十四、多版本并发控制

文章目录1. 什么是MVCC2. 快照读与当前读2.1 快照读2.2 当前读3. 复习3.1 再谈隔离级别3.2 隐藏字段、Undo Log版本链4. MVCC实现原理之ReadView4.1 什么是ReadView4.2 设计思路4.3 ReadView的规则4.4 MVCC整体操作流程5. 举例说明5.1 READ COMMITTED隔离级别下5.2 REPEATABLE …

Gerrit3.4.1安装+its插件

环境依赖jdk11安装jdk11&#xff1a;下载&#xff1a; wget https://download.java.net/openjdk/jdk11/ri/openjdk-1128_linux-x64_bin.tar.gz解压&#xff1a; tar zxvf openjdk-1128_linux-x64_bin.tar.gzsudo update-alternatives --install /usr/bin/java java /home/jenki…

P问题、NP问题、NPC问题、NP-Hard问题

经常听到老师讲&#xff0c;某一个问题&#xff08;比如说&#xff0c;车辆路径规划问题Vehicle Routing Problem&#xff09;是一个NP-Hard问题,此外&#xff0c;我们在阅读文章的时候&#xff0c;也经常会读到某一个问题是NP-Hard问题的陈述&#xff0c;与此同时&#xff0c;…

Python程序设计-第3章Python函数与模块

第3章Python函数与模块一.预习笔记 3.1 函数定义&#xff1a;def 函数名称 (参数1&#xff0c;参数2 …)&#xff1a; 函数体 * 函数是某一个功能或者某一段程序代码的一个封装 * 函数名是用户自己定义的名称&#xff0c;与变量的命名规则相同&#xff0c;用字母开头&#x…

Java线程池个人整理笔记

一、线程池有哪些优点 总体来说&#xff0c;线程池有如下的优势&#xff1a; &#xff08;1&#xff09;降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 &#xff08;2&#xff09;提高响应速度。当任务到达时&#xff0c;任务可以不需要等到线程创建…

配置Linux18.04系统/解决无法安装vmwatools的问题

一、解决无法安装vmwatools的问题 1.关闭虚拟机中的Linux18.04系统 2.打开虚拟机设置 3.修改所有的CD/DVD 、软盘 连接为&#xff1a;使用物理驱动器->自动检测&#xff08;如下图&#xff09; 4.打开虚拟机&#xff0c;都点是&#xff1b; 5.解决解压桌面上的vmware-…

春节特献!一文纵览2022年全球量子计算行业要闻!

&#xff08;图片来源&#xff1a;网络&#xff09;岁聿云暮&#xff0c;一元复始。如果说2018年是量子计算技术变革元年&#xff0c;那么2022年全球量子计算已正式步入市场探索加速期。随着中国、美国、欧盟等国家相继出台各种量子信息相关战略纲要和旗舰计划&#xff0c;越来…

数据的解析的介绍(1)

1.xpath 注意&#xff1a;提前安装xpath插件 &#xff08;1&#xff09;打开chrome浏览器 &#xff08;2&#xff09;点击右上角小圆点 &#xff08;3&#xff09;更多工具 &#xff08;4&#xff09;扩展程序 &#xff08;5&#xff09;拖拽xpath插件到扩展程序中 &#xff0…