ARC113E Rvom and Rsrev

news/2025/10/1 11:54:26/文章来源:https://www.cnblogs.com/Tmbcan/p/19122309

看看样例,发现要对 \(a\)\(b\) 的位置和数量分讨。

\(A\) 表示一段极长连续 \(a\)\(B\) 表示一段极长连续 \(b\)。答案只有三种情况:

  1. \(A\) 或者 \(B\)
  2. \(aB\)
  3. \(BA\)
  4. \(BaB\)

我们要做的操作是尽量把 \(b\) 向前挪动,直到挪不了或者挪了不优的时候才留下 \(a\)

考虑最终答案对应的 \(S\) 的情况。


\(A\)\(B\)

如果 \(S\) 里字母相同,什么都不做是最优的,否则会使字母数量变少。

\(S\) 不满足前面的所有条件。如果 \(S=\dots b\)\(a\) 有偶数个,我们要让 \(b\) 尽量向前挪动,直接把 \(a\) 删完即可。


\(aB\)

\(S\) 不满足前面的所有条件。如果 \(S = AB\),且 \(a\) 为奇数时,\(a\) 删不完,让 \(b\) 尽量向前挪动,那就剩下一个 \(a\) 最优。


\(BA\)

此时的答案,当 \(B\) 确定时,我们应该让 \(A\) 可能长。

\(S\) 结尾是 \(a\)

\(S\) 不满足前面的所有条件。如果 \(S\) 结尾是 \(a\),那么我们操作会是一直删 \(a\) 使 \(b\) 向前挪,并且末尾留下 \(A\) 尽量长。

先除去最后一段 \(A\),设剩下的 \(|A|=1\) 的段有 \(w_1\) 个,\(|A|>1\) 的段有 \(w_2\) 个。

我们每次操作,取最后一段 \(A\) 和第一段 \(A\) 的第一个位置,把第一段 \(A\) 拼到最后一段,把最后一段 \(B\) 转到前面。
这样会删掉 \(2 \times w_2\)\(a\),使得 \(S\) 中除了最后一段 \(A\) 只剩下 \(|A|=1\) 的段。

我们为了使剩下末尾的 \(A\) 尽量长,就让 \(|A|=1\) 的两两删,不够了再从末尾的 \(A\) 里拿一个出来,这样操作会减掉 \(2 \times \lceil \frac{w_1}{2} \rceil\)\(a\)

最后 \(S\) 中的 \(b\) 个数不变且被挪到了最前面,\(a\) 减少了\(2 \times (w_2 + \lceil \frac{w_1}{2} \rceil)\) 个。

\(S\) 结尾是 \(b\)

\(S\) 不满足前面的所有条件。如果 \(S\) 结尾是 \(b\) 且有奇数个 \(a\),假如我们直接先删 \(a\) 使 \(S=BaB\),那么我们再删两个 \(b\)\(a\) 挪到后面更优。

也就是说我们为了把后面的 \(b\) 挪到前面去,一定会删掉两个 \(b\)。那我们可以先删 \(b\),把一段 \(a\) 挪到末尾,然后将 \(b\) 向前挪并让末尾的 \(A\) 尽可能长,这对于先删 \(a\) 来说一定不劣。

我们选择操作一段 \(A\) 的前后两个 \(b\),把这段 \(A\) 转到最后,然后就和上面 \(S\) 结尾是 \(a\) 的情况相同了。

注意如果 \(S\) 开头不为 \(b\),那么我们无法让第一段 \(A\) 转到最后。

如果 \(S = \dots B_1aB_2\),且 \(|B_2| \le 2\),那么我们不能挪动中间的 \(a\)。因为如果操作完之后更优,应该满足 \(|B_1|-1+|B_2|-1 > |B_1|\)
此时我们把前面的 \(a\) 两两删掉,留下最后的一个 \(a\) 即可。
对应答案 \(BAB\)

代码

inline int w(int w1,int w2){return 2*w2+w1+(w1&1);
}
inline void solve(){int len = strlen(s+1);for(int i=1;i<=len;++i){cnta[i] = cnta[i-1]+(s[i]=='a');cntb[i] = cntb[i-1]+(s[i]=='b');}if(!cnta[len] || !cntb[len]){for(int i=1;i<=len;++i) putchar(s[i]);return ;}if(s[len]=='b' && !(cnta[len]&1)){for(int i=1;i<=cntb[len];++i) putchar('b');return ;}if(cnta[len-cntb[len]]==cnta[len] && (cnta[len]&1)){putchar('a');for(int i=1;i<=cntb[len];++i) putchar('b');return ;}if(s[len]=='b'){int lasa = len;for(int i=len;i;--i){if(s[i]^'b'){lasa = i;break;}}if(len-lasa<=2){for(int i=1;i<=cntb[lasa];++i) putchar('b');putchar('a');for(int i=cntb[lasa]+1;i<=cntb[len];++i) putchar('b');return ;}}int las = 0,w1 = 0,w2 = 0;for(int i=1;i<=len;++i){if(s[i]=='b'){if(i-1-(las+1)+1==1) ++w1;else if(i-1-(las+1)+1>1) ++w2;las = i;}}if(s[len]=='a'){for(int i=1;i<=cntb[len];++i) putchar('b');for(int i=1;i<=cnta[len]-w(w1,w2);++i) putchar('a');return ;}int tw = 0;if(s[1]=='b')tw = Min(w(w1-1,w2),w(w1,w2-1));else{int f = -1;for(int i=1;i<=len;++i){if(s[i]=='b'){f = (i>3);break;}}if(f){if(w2==1) tw = w(w1-1,w2);else tw = Min(w(w1-1,w2),w(w1,w2-1));}else{if(w1==1) tw = w(w1,w2-1);else tw = Min(w(w1-1,w2),w(w1,w2-1));}}for(int i=1;i<=cntb[len]-2;++i) putchar('b');for(int i=1;i<=cnta[len]-tw;++i) putchar('a');
}

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

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

相关文章

2025年西咸新区高端楼盘,西安刚需楼盘,沣东改善楼盘住宅口碑推荐,地建嘉信臻境3分钟通达高新,区位优势明显

2025年西咸新区高端楼盘新典范——地建嘉信臻境 在西安房地产市场中,地建嘉信臻境项目犹如一颗璀璨的新星,正闪耀着独特的光芒。该项目由拥有二十余年地产开发经验的团队运营,作为地建嘉信深耕陕西6年、布局6城8盘的…

P12704 Retribution

我也不知道为什么能过做法。 考虑暴力缩点,然后做线段树合并。 细节上,由于要在可持久化线段树上合并,所以每次要新开节点,在合并的时候多剪枝减少栈调用和新开节点。 如果尝试将询问离线挂在每个 SCC 上的话,\(1…

IDEA 高效配备指南:从基础到进阶的设置全解析

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Sunny Pro 网络验证- 仅需一键,即可为您的exe添加高强度防破加密!

点击访问:Sunny官网 Sunny Pro 技术栈纯C++语言 Windows IOCP+线程池+数据库连接池(使用SQLite作为数据库) 界面使用QT6,仅支持Windows Server 2019及以上版本系统或Windows 10 及以上x64系统注:本验证使用知名的…

完整教程:跨会话泄露:AI时代下的安全挑战与防御策略

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

网站建设案例精英中学网站建设方案 分校区

一、官网参考文档 达梦数据库官网&#xff1a;https://www.dameng.com/ &#xff0c;参考文档如下&#xff1a; 最后的文档地址为&#xff1a;Docker安装 | 达梦技术文档 二、dcoker安装 docker基本按照官网来就行&#xff0c;点击相应的链接下载镜像包。 复制到linux中&#x…

一条mysql数据库更新语句

发生场景:车间产出记录进行出库 国庆节前下班的时候,生产部门生产完进行入库,这个时候正常跑我们的业务XXXX——直接到根据单件档案的单件号更新单件档案上的最终用户信息时候出现了问题,跑着跑着就超时,这个时候…

US$128 Original Wellon VP-299 Programmer

Original Wellon VP-299 Programmer Electrical spec. of the AC adapter: AC input 100V to 240V, 50/60Hz, DC output 9V/0.6A40 Pin ZIF socket pin-drivers.Interface with LAPTOP, PC or compatibles through USB…

凡科建的网站怎么做seometro主题 wordpress

1.背景当多个进程可能会对同样的数据执行操作时&#xff0c;这些进程需要保证其它进程没有在操作&#xff0c;以免损坏数据。通常&#xff0c;这样的进程会使用一个“锁文件”&#xff0c;也就是建立一个文件来告诉别的进程自己在运行&#xff0c;如果检测到那个文件存在则认为…

十堰响应式网站网站开发员纵向发展

【STM32篇】4988驱动步进电机_hr4988-CSDN博客 在上篇文章中使用了HR4988实现了步进电机的驱动&#xff0c;在实际运用过程&#xff0c;HR4988或者A4988驱动步进电机会存在电机噪音太大的现象。本次将向各位友友介绍一个驱动简单且非常静音的一款步进电机驱动IC。 1.DRV8425简介…

浅谈递归入门(1) - 指南

浅谈递归入门(1) - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &…

python+uniapp基于微信小工具的医院陪诊预约系统

python+uniapp基于微信小工具的医院陪诊预约系统pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

详细介绍:Nginx 访问控制、用户认证与 HTTPS 配置指南

详细介绍:Nginx 访问控制、用户认证与 HTTPS 配置指南2025-10-01 11:36 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; d…

自有服务器可以做网站吗wordpress游客留言

PAGEPAGE 10北大计算机考研 高等数学真题解答2008 年(5 题 60 分)1 (12 分) f (x) 有连续的二阶导数&#xff0c; f (a)  0 &#xff0c;求limxa1f (x  a)  f (a)1f (a) 。2 (12 分) f (x) 在a,b上连续且 f (a)  f (b)  0 &#xff0c; f (a) f (b) …

最容易做的门户网站动漫设计学校

特点 两线制总线&#xff1a;I2C仅使用两条线——串行数据线&#xff08;SDA&#xff09;和串行时钟线&#xff08;SCL&#xff09;进行通信&#xff0c;有效降低了连接复杂性。多主多从设备支持&#xff1a;I2C支持多个主设备和多个从设备连接到同一总线上。每个设备都有唯一…

comfyui配置

comfyui配置1.通过网盘分享的文件:ComfyUI-aki-v1.2.7z 链接: https://pan.baidu.com/s/168jlRhuu7b0kNgGcjYdInw?pwd=dtm1 提取码: dtm1

哪个网站做相册好海南网

1、为什么 shiro 有了《角色》后&#xff0c;还要设置《角色权限》呢&#xff1f;&#xff08;问题&#xff09; 思考&#xff1a;设置好角色了&#xff0c;那么就代表什么操作都可以执行了吗&#xff1f; 理解&#xff1a;如果上边回答是的话&#xff0c;那么只是《角色》层次…

[深度学习] 大模型学习5-高效微调框架Unsloth使用指北

Unsloth是一个专注于加速大语言模型微调过程的开源项目。它通过一系列底层优化,显著提升了微调速度并大幅降低了内存消耗,同时能保持模型性能。无论是研究者还是开发者,都能借助Unsloth更高效地定制自己的大语言模型…

前端-JavaScript简介JavaScript模块化 - 努力-

前端-JavaScript简介JavaScript模块化前端-JavaScript简介JavaScript模块化一、JavaScript介绍我们已经学习了HTML、CSS的基础内容,我们知道HTML负责网页的结构,而CSS负责的是网页的表现。 而要想让网页具备一定的交…

基本地址变换机构

设页面大小为L,逻辑地址A到物理地址E的变换过程如下 1.计算页号P和页内偏移量W 2.比较页号P和页表大小M如果P>=M则会发生越界中断,否则继续执行。(页号从0开始,页表长度至少为1,因此P=M也会越界) 3.页表中页号…