Problem p03618 (C++)

Buggy submission (status: Runtime Error):
#include "bits/stdc++.h"
#ifndef err
#define err(...) (void)0
#endif
using namespace std;
using ll = long long;
using ull = decltype(1ull);
template <class T> int size(T &&a) { return a.size(); }
#define REP(t, a)                                                              \
  for (typename make_signed<decltype(a.second)>::type t = a.first,             \
                                                      _l##t = a.second;        \
       t < _l##t; t++)
#define RREP(t, a)                                                             \
  for (typename make_signed<decltype(a.second)>::type t = a.second - 1,        \
                                                      _l##t = a.first;         \
       t >= _l##t; t--)
template <class B> pair<int, B> make_pair(B b) { return {0, b}; }
#define rep(t, ...) REP(t, make_pair(__VA_ARGS__))
#define rrep(t, ...) RREP(t, make_pair(__VA_ARGS__))
#define all(a) begin(a), end(a)
#define rall(a) a.rbegin(), a.rend()
#define var(t, ...)                                                            \
  t __VA_ARGS__;                                                               \
  in, __VA_ARGS__;

void Calc();
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cin.exceptions(istream::failbit | istream::badbit);
  cout << fixed << setprecision(15);
  Calc();
  cout.flush();
  return 0;
}
template <class A> void amax(A &a, A b) { a = max(a, b); }
template <class A> void amin(A &a, A b) { a = min(a, b); }
template <class A> int comp(A a, A b) { return a < b ? 1 : b < a ? -1 : 0; }
struct Scanner {
  template <class A = string> A Next() {
    A a;
    cin >> a;
    return a;
  }
  template <class A = int> vector<A> Array(int n) {
    vector<A> a(n);
    for (A &i : a)
      cin >> i;
    return a;
  }
  string Line() const {
    string s;
    getline(cin, s);
    return s;
  }
  template <class A> Scanner &operator,(A &a) {
    a = Next<A>();
    return *this;
  }
  template <class A> operator A() { return Next<A>(); }
} in;

/*---------------------------------------------------------------------*/

ll solve2(string a) {
  set<string> s;
  int n = size(a);
  rep(i, n + 1) rep(j, i, n + 1) {
    reverse(a.begin() + i, a.begin() + j);
    s.insert(a);
    reverse(a.begin() + i, a.begin() + j);
  }
  return size(s);
}

void Calc() {
  string s = in;
  int n = size(s);
  cerr << (solve2(s)) << endl;
  ll ans = 1;
  std::array<vector<int>, 26> t{};
  rep(i, 26) {
    t[i].resize(n + 1);
    char c = i + 'a';
    rep(j, n) if (s[j] != c) t[i][j]++;
  }
  rep(i, 26) rep(j, n) t[i][j + 1] += t[i][j];
  rep(i, n) { ans += t[s[i] - 'a'][n] - t[s[i] - 'a'][i]; }
  cout << (ans) << endl;
}


Fixed submission:
#include "bits/stdc++.h"
#ifndef err
#define err(...) (void)0
#endif
using namespace std;
using ll = long long;
using ull = decltype(1ull);
template <class T> int size(T &&a) { return a.size(); }
#define REP(t, a)                                                              \
  for (typename make_signed<decltype(a.second)>::type t = a.first,             \
                                                      _l##t = a.second;        \
       t < _l##t; t++)
#define RREP(t, a)                                                             \
  for (typename make_signed<decltype(a.second)>::type t = a.second - 1,        \
                                                      _l##t = a.first;         \
       t >= _l##t; t--)
template <class B> pair<int, B> make_pair(B b) { return {0, b}; }
#define rep(t, ...) REP(t, make_pair(__VA_ARGS__))
#define rrep(t, ...) RREP(t, make_pair(__VA_ARGS__))
#define all(a) begin(a), end(a)
#define rall(a) a.rbegin(), a.rend()
#define var(t, ...)                                                            \
  t __VA_ARGS__;                                                               \
  in, __VA_ARGS__;

void Calc();
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cin.exceptions(istream::failbit | istream::badbit);
  cout << fixed << setprecision(15);
  Calc();
  cout.flush();
  return 0;
}
template <class A> void amax(A &a, A b) { a = max(a, b); }
template <class A> void amin(A &a, A b) { a = min(a, b); }
template <class A> int comp(A a, A b) { return a < b ? 1 : b < a ? -1 : 0; }
struct Scanner {
  template <class A = string> A Next() {
    A a;
    cin >> a;
    return a;
  }
  template <class A = int> vector<A> Array(int n) {
    vector<A> a(n);
    for (A &i : a)
      cin >> i;
    return a;
  }
  string Line() const {
    string s;
    getline(cin, s);
    return s;
  }
  template <class A> Scanner &operator,(A &a) {
    a = Next<A>();
    return *this;
  }
  template <class A> operator A() { return Next<A>(); }
} in;

/*---------------------------------------------------------------------*/

ll solve2(string a) {
  set<string> s;
  int n = size(a);
  rep(i, n + 1) rep(j, i, n + 1) {
    reverse(a.begin() + i, a.begin() + j);
    s.insert(a);
    reverse(a.begin() + i, a.begin() + j);
  }
  return size(s);
}

void Calc() {
  string s = in;
  int n = size(s);
  // cerr << (solve2(s)) << endl;
  ll ans = 1;
  std::array<vector<int>, 26> t{};
  rep(i, 26) {
    t[i].resize(n + 1);
    char c = i + 'a';
    rep(j, n) if (s[j] != c) t[i][j]++;
  }
  rep(i, 26) rep(j, n) t[i][j + 1] += t[i][j];
  rep(i, n) { ans += t[s[i] - 'a'][n] - t[s[i] - 'a'][i]; }
  cout << (ans) << endl;
}