题面
在一个只包含A、B、C的字符串,有一种操作,可使 “ABC” 变成 ”BCA“,求字符串s的最多操作数。
1≤∣s∣≤200000
思路:
易得,该操作是将A与BC交换位置,可用 1、0分别代表“A”、“BC”。题意转化对一个只包含10的序列,将所有的10更新01,即将所有的0放在1前面。假设序列中共有k个0,
每个0前面有a[i]个1,则
对于单独B、C,则可看作是两个序列分隔的标志。
代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 5 char c[200010]; 6 int i,k,l; 7 ll ans; 8 9 int main() { 10 scanf("%s", c); 11 l = strlen(c); 12 while (i < l) { 13 if (c[i] == 'A') { 14 k++; 15 i++; 16 } else if (c[i] == 'B' && c[i + 1] == 'C') { 17 ans += k; 18 i += 2; 19 } else { 20 k = 0; 21 i++; 22 } 23 } 24 printf("%lld ", ans); 25 return 0; 26 }