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

题解:AT_abc421_c [ABC421C] Alternated

题面

思路

似乎有很多大神用类似逆序对的方法 \(O(n\log n)\) 通过了此题,不过此题是有贪心 \(O(n)\) 做法的。

我们可以从结果推导,每一个 AB 都相邻的情况只有两种:AB...ABBA...BA,以下称这两个结果串为 \(t\),题目给出的串为 \(s\)

考虑怎样使得其消耗代价最小,首先容易发现,将 A 移动完后,B 自然也就回到它应该在的位置,所以可以只讨论 A 如何移动。

首先粗略贪心一下,如果我要使当前这个 A 产生的代价最小,必然要找 \(t\) 中离它最近的 A,但是很快我们就能发现这个结论是错误的,\(s=BBAA\) 就是个很简单的例子。

现在我们从左往右看,如果当前 \(t\) 有剩余没匹配上的 A 在这个 \(s_A\) 的下标之前,那么如果用之后的 A 匹配肯定要消耗更多代价。

所以结论显而易见,第 \(i\) 次出现在 \(s\) 中的 A 应该移动到第 \(i\) 次出现在 \(t\) 中的 A 上,计算两种 \(t\) 的答案取最小值就好了。

AC link。

http://www.wxhsa.cn/company.asp?id=3650

相关文章:

  • MySQL数据库:SQL数据类型
  • Ubuntu 安装
  • 幼等数论
  • 搭建rocketmq的三主三从遇到的坑
  • 深入解析:轻松Linux-9.进程间通信
  • 2025.9.14——1黄1绿
  • Ubuntu 中改图片大小
  • Day01
  • 认识眼图和眼图的参数
  • 【芯片设计-信号完整性 SI 学习 1.2 -- loopback 回环测试】 - 实践
  • 【科研绘图系列】R语言绘制地图和散点图 - 指南
  • Java NIO 学习小记
  • 扩展欧几里得算法求乘法逆元
  • redis实现缓存3-封装redis工具类
  • 高阻态
  • 鸿蒙应用开发从入门到实战(四):ArkTS 语言概述
  • 命令模式的深度解析:从标准实现到TPL Dataflow高性能架构
  • JavaWeb
  • 读书笔记:为什么数据在磁盘上的存放顺序如此重要?
  • Rcc_APBPeriphClockCmd()
  • 故障处理:ORA-19809: limit exceeded for recovery files
  • ORA-01555系列:二、ORA-01555的场景分析与解决方案
  • PySimpleGUI常用控件
  • 25.09.14 与其感慨路难行,不如马上出发
  • GCC工具链应用学习笔记
  • 初始化 MCP 环境 创建 MCP Server (一)
  • 博客园格式设置
  • [总结/备赛]备战 CSP-S 2025 初赛总结
  • win11 系统如何进行硬盘分区?固态硬盘怎么分区?SSD 固态硬盘是分区好还是不分区好?
  • 逆序数及其应用