Problem:
Score : 600 points

Problem Statement

You are given a string s consisting of A, B and C.

Snuke wants to perform the following operation on s as many times as possible:

Choose a contiguous substring of s that reads ABC and replace it with BCA.

Find the maximum possible number of operations.

Constraints

1 \leq |s| \leq 200000

Each character of s is A, B and C.

Input

Input is given from Standard Input in the following format:

s

Output

Find the maximum possible number of operations.

Sample Input 1

ABCABC

Sample Output 1

3

You can perform the operations three times as follows: ABCABC → BCAABC → BCABCA → BCBCAA. This is the maximum result.

Sample Input 2

C

Sample Output 2

0

Sample Input 3

ABCACCBABCBCAABCB

Sample Output 3

6

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <bits/stdc++.h>
using namespace std;

#define MP make_pair 
#define N 200005
typedef long long LL;
const int mod = 1e9 +7;

char s[N];

int main()
{
	//freopen("in.txt", "r", stdin);
	//freopen("out.txt", "w", stdout);
	
	int n;
	scanf("%s", s+1);
	n = strlen(s+1);
	LL ans = 0;
	int cnt = 0;
	while (n)
	{
		if (s[n] == 'C')
		{
			if (n == 1) break;
			if (s[n-1] == 'C') cnt = 0, --n;
			else if (s[n-1] == 'B') ++cnt, n -= 2;
			else cnt = 0, --n; 
		}
		else if (s[n] == 'B') --n;  
		else ans += cnt, --n;
	}
	cout << ans << endl;
	
	return 0;
}