Problem p03200 (C++)

Buggy submission (status: Time Limit Exceeded):
#include <algorithm>
#include <cmath>
#include <deque>
#include <functional>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <string>
#include <tuple>
#include <typeinfo>
#include <utility>
#include <vector>
using namespace std;

#define all(container) container.begin(), container.end()
#define sortall(container) (sort(container.begin(), container.end()))
#define yn(cond) ((cond) ? (cout << "Yes" << endl) : (cout << "No" << endl))
#define YN(cond) ((cond) ? (cout << "YES" << endl) : (cout << "NO" << endl))
#define LLONG_MAX numeric_limits<long long>::max()
#define INT_MAX numeric_limits<int>::max()

typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<double> vd;
typedef vector<bool> vb;
typedef vector<string> vs;
typedef vector<char> vc;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<pii> vpii;
typedef vector<pll> vpll;
typedef vector<vll> vvll;
typedef vector<vi> vvi;
typedef vector<vb> vvb;
typedef vector<vc> vvc;

typedef struct edge_ {
  ll to;
  ll cost;
} edge;

typedef struct point_ {
  ll x, y;
  point_(ll x = 0, ll y = 0) : x(x), y(y) {}
} point;

constexpr double PI = 3.14159265358979323846;
constexpr ll INF = 1 << 15;
constexpr ll MOD = (ll)1e9 + 7;
constexpr double EPS = 1e-7;
constexpr int dy4[4] = {0, 1, 0, -1};
constexpr int dx4[4] = {1, 0, -1, 0};
constexpr int dy8[8] = {0, 1, 1, 1, 0, -1, -1, -1};
constexpr int dx8[8] = {1, 1, 0, -1, -1, -1, 0, 1};

template <typename T> istream &operator>>(istream &is, vector<T> &vec) {
  for (T &x : vec)
    is >> x;
  return is;
}

template <typename T> ostream &operator<<(ostream &os, const vector<T> &vec) {
  for (const T &x : vec)
    os << x << " ";
  return os;
}

template <typename S, typename T>
istream &operator>>(istream &is, pair<S, T> &p) {
  is >> p.first >> p.second;
  return is;
}

istream &operator>>(istream &is, point &p) {
  is >> p.x >> p.y;
  return is;
}

template <typename S, typename T>
ostream &operator<<(ostream &os, const pair<S, T> &p) {
  os << "{" << p.first << " " << p.second << "}";
  return os;
}

ostream &operator<<(ostream &os, const point &p) {
  os << "(" << p.x << " " << p.y << ")";
  return os;
}

template <typename T> void vecOutPadding(vector<T> &vec, string pad = " ") {
  for (const T &elem : vec)
    cout << elem << pad;
}

template <typename T> void matOut(vector<vector<T>> &mat) {
  for (const auto &row : mat) {
    for (const T &col : row)
      cout << col << " ";
    cout << endl;
  }
}

/******************************************************************************/
/**********************         Don't make WA !!         **********************/
/******************************************************************************/

int main() {
  string S;
  cin >> S;

  ll ans = 0;
  ll cur = 1;
  while (cur != 0) {
    cur = 0;
    for (int i = S.length() - 2; i >= 0; i--) {
      if (S[i] == 'B' && S[i + 1] == 'W') {
        cur++;
        S[i] = 'W';
        S[i + 1] = 'B';
      }
    }
    ans += cur;
  }

  cout << ans << endl;

  return 0;
}

Fixed submission:
#include <algorithm>
#include <cmath>
#include <deque>
#include <functional>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <string>
#include <tuple>
#include <typeinfo>
#include <utility>
#include <vector>
using namespace std;

#define all(container) container.begin(), container.end()
#define sortall(container) (sort(container.begin(), container.end()))
#define yn(cond) ((cond) ? (cout << "Yes" << endl) : (cout << "No" << endl))
#define YN(cond) ((cond) ? (cout << "YES" << endl) : (cout << "NO" << endl))
#define LLONG_MAX numeric_limits<long long>::max()
#define INT_MAX numeric_limits<int>::max()

typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<double> vd;
typedef vector<bool> vb;
typedef vector<string> vs;
typedef vector<char> vc;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<pii> vpii;
typedef vector<pll> vpll;
typedef vector<vll> vvll;
typedef vector<vi> vvi;
typedef vector<vb> vvb;
typedef vector<vc> vvc;

typedef struct edge_ {
  ll to;
  ll cost;
} edge;

typedef struct point_ {
  ll x, y;
  point_(ll x = 0, ll y = 0) : x(x), y(y) {}
} point;

constexpr double PI = 3.14159265358979323846;
constexpr ll INF = 1 << 15;
constexpr ll MOD = (ll)1e9 + 7;
constexpr double EPS = 1e-7;
constexpr int dy4[4] = {0, 1, 0, -1};
constexpr int dx4[4] = {1, 0, -1, 0};
constexpr int dy8[8] = {0, 1, 1, 1, 0, -1, -1, -1};
constexpr int dx8[8] = {1, 1, 0, -1, -1, -1, 0, 1};

template <typename T> istream &operator>>(istream &is, vector<T> &vec) {
  for (T &x : vec)
    is >> x;
  return is;
}

template <typename T> ostream &operator<<(ostream &os, const vector<T> &vec) {
  for (const T &x : vec)
    os << x << " ";
  return os;
}

template <typename S, typename T>
istream &operator>>(istream &is, pair<S, T> &p) {
  is >> p.first >> p.second;
  return is;
}

istream &operator>>(istream &is, point &p) {
  is >> p.x >> p.y;
  return is;
}

template <typename S, typename T>
ostream &operator<<(ostream &os, const pair<S, T> &p) {
  os << "{" << p.first << " " << p.second << "}";
  return os;
}

ostream &operator<<(ostream &os, const point &p) {
  os << "(" << p.x << " " << p.y << ")";
  return os;
}

template <typename T> void vecOutPadding(vector<T> &vec, string pad = " ") {
  for (const T &elem : vec)
    cout << elem << pad;
}

template <typename T> void matOut(vector<vector<T>> &mat) {
  for (const auto &row : mat) {
    for (const T &col : row)
      cout << col << " ";
    cout << endl;
  }
}

/******************************************************************************/
/**********************         Don't make WA !!         **********************/
/******************************************************************************/

int main() {
  string S;
  cin >> S;

  ll ans = 0;
  ll white = 0;
  for (int i = S.length() - 1; i >= 0; i--) {
    if (S[i] == 'W')
      white++;
    else
      ans += white;
  }

  cout << ans << endl;

  return 0;
}