ABC

题面

在一个只包含A、B、C的字符串,有一种操作,可使 “ABC” 变成 ”BCA“,求字符串s的最多操作数。

1s200000

思路:

易得,该操作是将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\n", ans);
25     return 0;
26 }
View Code

 

posted @ 2019-07-14 21:06  Snow_in_winer  阅读(105)  评论(0编辑  收藏  举报