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
56
57
58
59
60
61
62
63
64
65
66
67
#include <bits/stdc++.h>
#include <iostream>

using namespace std;

#define FAST  ios_base::sync_with_stdio(0) ;cin.tie(0);

#define fi(a, b) for(int i=a; i<=b; i++)
#define fj(a, b) for(int j=a; j<=b; j++)

#define MAX_DLUG 300004

int licz[ 3 ][ MAX_DLUG ];
int slowo[ MAX_DLUG ];

bool warunek( int a, int b, int c )
{
  if( a == b && a == c ) return true;
  if( a == 0 && b == c ) return true;
  if( b == 0 && a == c ) return true;
  if( c == 0 && b == a ) return true;
  if( a == 0 && b == 0 ) return true;
  if( a == 0 && c == 0 ) return true;
  if( c == 0 && b == 0 ) return true;
  return false;
}

int main()
{
    FAST
    string st1;
    cin >> st1;
    int dlugosc = st1.size();
    fi(0, dlugosc - 1 ) 
    switch (st1[ i ])
    {
      case 'a' : slowo[ i ] = 0; break;
      case 'b' : slowo[ i ] = 1; break;
      case 'c' : slowo[ i ] = 2; break;
    }
    fi( 0, dlugosc ) licz[ 0 ][ i ] = licz[ 1 ][ i ] = licz[ 2 ][ i ] = 0;
    long wynik = 0;
    licz[ slowo[ 0 ] ][ 0 ] = 1;
    wynik ++;
    fi( 1, dlugosc - 1 )
    {
      licz[ 0 ][ i ] = licz[ 0 ][ i - 1 ];
      licz[ 1 ][ i ] = licz[ 1 ][ i - 1 ];
      licz[ 2 ][ i ] = licz[ 2 ][ i - 1 ];
      licz[ slowo[ i ] ][ i ] ++ ;
      if( warunek( licz[ 0 ][ i ], licz[ 1 ][ i ], licz[ 2 ][ i ] ) )  wynik ++;
    }
    fi( 1, dlugosc - 1 )
    {
      int cyfra;
      if( licz[ 0 ][ i - 1 ] == 1 ) cyfra = 0; 
      else if( licz[ 1 ] [ i - 1 ] == 1 ) cyfra = 1;
      else if( licz[ 2 ] [ i - 1 ] == 1 ) cyfra = 2;
      fj( i, dlugosc - 1 )
      {
        licz[ cyfra ][ j ] -- ;
        if( warunek( licz[ 0 ][ j ], licz[ 1 ][ j ], licz[ 2 ][ j ] ) ) wynik ++;  
      }
    }
    cout <<  wynik << '\n';
    return 0;
}