专栏文章

B4218 [常州市赛 2023] ABC 字符串 题解

B4218题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mip919e5
此快照首次捕获于
2025/12/03 08:08
3 个月前
此快照最后确认于
2025/12/03 08:08
3 个月前
查看原文

题意

在一个只含有 A,B,CA,B,C 的字符串中,最多可以操作几次,将 ABCABC 调换成 BCABCA

思路

操作的本质其实就是将 AA 往后移动两位,BCBC 为整体向前移动,只需要考虑一种情况,将 BCBC 看为一个整体 XX,当左边有多个 AA 右边有一个 BCBC 时。
例如 AAAXAAAX 会变成 XAAAXAAA 所以同理若左边有多个 AA 且右边有多个 XX 时就会依次从 AAAXXAAAXX 变成 XAAAXXAAAX 再变成 XXAAAXXAAA 那么这道题就结束了。

代码

CPP
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll N=2e6+5,mod=998244353;
string s;
ll cnt,ans;
signed main(){
	ios::sync_with_stdio(0),cout.tie(0),cin.tie(0);
	cin>>s;
	for(int i=0;i<s.size();i++){
		if(i+1<s.size() && s[i]=='B' && s[i+1]=='C'){
			ans+=cnt;
			i++;
		}else if(s[i]=='A') cnt++;
		else cnt=0;
	}
	cout<<ans;
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...