1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <cstdio>
#include <iostream>
#include <bits/stdc++.h>

using namespace std;

#define MAX_LEN 300010
int znaki[3][MAX_LEN];

int ile(int pozycja, int left, int right) {
	return znaki[pozycja][right] - znaki[pozycja][left - 1];
}

int main() {
	char slowo[MAX_LEN];

	cin.getline(slowo, MAX_LEN);
	unsigned int len = strlen(slowo);

	for (unsigned int i = 1; i <= len; i++) {
		znaki[0][i] = znaki[0][i-1];
		znaki[1][i] = znaki[1][i-1];
		znaki[2][i] = znaki[2][i-1];

		znaki[slowo[i-1] - 'a'][i] = znaki[slowo[i-1] - 'a'][i-1] + 1;
	}

	long long int wynik = 0;
	for (unsigned int i = 1; i <= len; i++) {
		for (unsigned int j = i; j <= len; j++) {
			int ile_a = ile(0, i, j);
			int ile_b = ile(1, i, j);
			int ile_c = ile(2, i, j);

			int ile_zer = 0;
			if (ile_a == 0) ile_zer++;
			if (ile_b == 0) ile_zer++;
			if (ile_c == 0) ile_zer++;

			if (
				ile_zer == 2
				|| (ile_a == ile_b && ile_a == ile_c)
				|| (ile_a == 0 && ile_b == ile_c)
				|| (ile_b == 0 && ile_a == ile_c)
				|| (ile_c == 0 && ile_a == ile_b)
			) {
				wynik++;
			}
		}
	}

	printf("%lld\n", wynik);

	return 0;
}