当前位置: 首页 > news >正文

cf div2 1051 E(视角转换,构造+思维)

E

一道简约清新的构造题,感觉这种构造题真的很难得。

回顾题意:给定一个括号串,每次可以翻转两个相邻的相同括号,任意次,问能否将原序列变成一个 \(RBS\),并给出构造方案。

直接按原操作的角度来想是很困难的。这个时候就需要考虑:能否将操作变成一种简约,易懂的等价操作

考虑对原串作一种视角上的变换:奇数位不变,偶数位翻转。(注意,不实际改变每个位置的元素,只是对于特定位置更换看待视角

变换后,对于新视角下的操作就变为了:交换两个相邻的不同括号。因为任意两个相邻的位置,必然恰好由一个奇数位和一个偶数位构成,而若两个位置上的元素在原视角是相同的,则在新视角一定是不同的。而交换两个相邻的相同括号等价于未操作,但是我们视为可以交换两个相邻的相同括号。综合以上两点,其实新视角下的操作等价于可以交换任意两个相邻位置上的元素,进而等价于可以交换任意两个位置上的元素,即可以得到所有元素不变情况下的任意排列。这时的操作就变得很简约了。

于是,原问题等价于:对于含有恰好 \(x\)\('('\) 和恰好 \(y\)\(')'\) 的任意排序,是否存在一种排列,使得其所有偶数位翻转后是一个 \(RBS\)

(这里主要记录一下视角转换的思考过程,感觉非常值得借鉴与复用。后面的解法就不再写了,看其他人的就行。)

code

2024ICPC南京B

这道题与去年的南京区域赛是一类题目,套路一模一样。

对原串作视角转换:将所有偶数位的 \(01\) 交换,\(2\) 不变。则原操作的“删除任意两个 \(00\)\(11\)”,在新视角下便等价于删除任意两个相邻的不同数字。考虑一个很典的性质:对于同时包含 \(0\)\(1\)\(01\) 串,一定含有相邻的 \(01\)\(10\)。于是我们发现,在新视角下,\(0\)\(1\) 两种数字只会留下一个。若想让最终序列尽可能短,那么显然应该让 \(01\) 数量尽可能接近。于是 \(2\) 的转变根据 \(01\) 的数量差贪心进行即可。具体细节见代码。

code

http://www.hskmm.com/?act=detail&tid=9658

相关文章:

  • 从“被动监控”到“主动优化”:MyEMS 重构能源管理价值的路径
  • phoenix 导出sql执行结果到文件中
  • 论文解读-《Graph Retrieval-Augmented Generation A Survey》 - zhang
  • AI编程问题处理与传统网页搜索对比分析
  • APP 内测分发的核心逻辑与流程,虾分发让效率翻倍
  • WPF Canvas 网格线背景样式
  • C++ 最开始的地方
  • ClkLog埋点与用户行为分析系统:架构升级与性能全面提升
  • 常见开源安全工具列表
  • ARC187 做题记
  • SAP物料自动记账科目设置总结
  • SpringBoot启动流程
  • NVR设备ONVIF接入平台EasyCVR视频融合平台智慧小区视频监控一站式建设方案
  • 移远模组使用移远云平台对接指令
  • 解码C语言关键字
  • 接龙大师微信小程序管理系统:一站式社群信息收集与活动管理解决方案
  • Windows环境中安装Zookeeper
  • YOLOv7安全评估揭示11个漏洞:RCE攻击与模型差异风险
  • ​​电流探头选型技术指南:精准捕获电流信号的艺术​​
  • 读人形机器人16本地制造的环境和经济效益
  • 详细介绍:【卷积神经网络详解与实例】10——经典CNN之GoogLeNet
  • openEuler 24.03 (LTS-SP2)安装mysql 8.4.5(glib.2.17)
  • wso2~api的高级限流策略
  • openEuler安装mysql矩阵
  • 【转载】达梦数据库物理备份与逻辑备份的区别
  • openEuler使用xtrabackup报libssl.so问题
  • jmeter中八大元件的执行顺序
  • Ubuntu 安装 JDK
  • EHOME视频平台EasyCVR视频分析设备平台监控摄像机的接入与智能视频分析
  • python+excel实现办公自动化学习 - 教程