题目大意: B A ( s ) BA(s) BA(s)代表字符串中 b a ba ba的数量, A B ( s ) AB(s) AB(s)代表字符串中 a b ab ab的数量。每次可以选择 s s s中的一个字符替换为 a , b a,b a,b,求在最小操作次数下让 B A ( s ) = A B ( s ) BA(s)= AB(s) BA(s)=AB(s)后得到的字符串。
思路分析:题目要求使 a b ab ab和 b a ba ba平衡,那么我们考虑什么时候能够达成平衡条件:对于一个字串单位 a b a aba aba或 b a b bab bab,其 a b ab ab和 b a ba ba的数量是平衡的。
那么我们再考虑非法的情况,如果出现 a b b 、 b a a abb、 baa abb、baa,不难发现如果前后拼接字符如果都相同的话,那么一定会构成 b a b bab bab类型,如果先后分别加相反字符( a a a a a b b b b b aaaaabbbbb aaaaabbbbb、 b b b b b a a a a a bbbbbaaaaa bbbbbaaaaa),那么只需要修改首尾字符即可。我们继续将这个结论进行推广,很容易发现对于任意的字符串,字串内部一定存在①.相等的 a b 、 b a ab、ba ab、ba字串数目②.二者相差 1 1 1.
那么对于给定的字符串,只需要判断是否字符串首尾字符是否相等,如果不相同则修改为相同即可。
#include
using namespace std;
inline void solve(){
char s[1000]; cin >> s;
int len = strlen(s);
if (len > 1 && s[0] != s[len - 1]){
if (s[len - 1] == 'a') s[len - 1] = 'b';
else s[len - 1] = 'a';
}
cout n >> k;
int now = 1, cnt = 0;
if(n == 1){ cout
关注
打赏
- 回坑记之或许是退役赛季?
- [LCT刷题] P1501 [国家集训队]Tree II
- [LCT刷题] P2147 洞穴勘测
- 2022-2023 ICPC Brazil Subregional Programming Contest VP记录
- [线段树套单调栈] 2019-2020 ICPC Asia Hong Kong Regional Contest H.[Hold the Line]
- The 2021 ICPC Asia Nanjing Regional Contest E.Paimon Segment Tree 区间合并线段树/维护矩阵乘法
- CF580E - Kefa and Watch 线段树维护哈希
- HDU5869 Different GCD Subarray Query 离线查询/区间贡献
- 27.CF1004F Sonya and Bitwise OR 区间合并线段树
- 26.CF1000F One Occurrence