Problem p02589 (C++) — buggy submission, verdict: Runtime Error

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int, int>
#define ull unsigned ll
#define f first
#define s second
#define ALL(x) x.begin(), x.end()
#define SZ(x) (int)x.size()
#define SQ(x) (x) * (x)
#define MN(a, b) a = min(a, (__typeof__(a))(b))
#define MX(a, b) a = max(a, (__typeof__(a))(b))
#define pb push_back
#define SORT_UNIQUE(c)                                                         \\
  (sort(c.begin(), c.end()),                                                   \\
   c.resize(distance(c.begin(), unique(c.begin(), c.end()))))
#ifdef BALBIT
#define IOS()
#define bug(...)                                                               \\
  fprintf(stderr, "#%d (%s) = ", __LINE__, #__VA_ARGS__), _do(__VA_ARGS__);
template <typename T> void _do(T &&x) { cerr << x << endl; }
template <typename T, typename... S> void _do(T &&x, S &&...y) {
  cerr << x << ", ";
  _do(y...);
}
#else
#define IOS()                                                                  \\
  ios_base::sync_with_stdio(0);                                                \\
  cin.tie(0);
#define endl '\\n'
#define bug(...)
#endif

const int iinf = 1e9 + 10;
const ll inf = 1ll << 60;
const ll mod = 1e9 + 7;

void GG() {
  cout << "0\\n";
  exit(0);
}

ll mpow(ll a, ll n, ll mo = mod) { // a^n % mod
  ll re = 1;
  while (n > 0) {
    if (n & 1)
      re = re * a % mo;
    a = a * a % mo;
    n >>= 1;
  }
  return re;
}

ll inv(ll b, ll mo = mod) {
  if (b == 1)
    return b;
  return (mo - mo / b) * inv(mo % b, mo) % mo;
}

const int maxn = 2e6 + 5;

int to[maxn][26];
int hv[maxn][26];
int NOW = 1;

void add(string x) {
  int at = 0;
  vector<int> me(26);
  for (char c : x)
    me[c - 'a']++;
  for (int i = 0; i < SZ(x); ++i) {
    for (int j = 0; j < 26; ++j)
      hv[at][j] += me[j] != 0;
    //        if (i == SZ(x)) break;
    int c = x[i] - 'a';
    me[c]--;
    if (to[at][c] != -1) {
      at = to[at][c];
    } else {
      to[at][c] = NOW;
      at = NOW++;
    }
  }
}

ll gt(string x) {
  int at = 0;
  for (int i = 0; i < SZ(x) - 1; ++i) {
    if (to[at][x[i] - 'a'] == -1)
      return 0;
    at = to[at][x[i] - 'a'];
  }
  return hv[at][x.back() - 'a'];
}

signed main() {
  IOS();
  int n;
  cin >> n;
  memset(to, -1, sizeof to);
  vector<string> v;
  for (int i = 0; i < n; ++i) {
    string s;
    cin >> s;
    reverse(ALL(s));
    v.pb(s);
  }
  sort(ALL(v), [&](string a, string b) { return SZ(a) > SZ(b); });
  ll re = 0;
  for (string s : v) {
    bug(s);
    re += gt(s);
    add(s);
  }
  bug(NOW);
  cout << re << endl;
}


Error: -11

Fixed submission:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int, int>
#define ull unsigned ll
#define f first
#define s second
#define ALL(x) x.begin(), x.end()
#define SZ(x) (int)x.size()
#define SQ(x) (x) * (x)
#define MN(a, b) a = min(a, (__typeof__(a))(b))
#define MX(a, b) a = max(a, (__typeof__(a))(b))
#define pb push_back
#define SORT_UNIQUE(c)                                                         \\
  (sort(c.begin(), c.end()),                                                   \\
   c.resize(distance(c.begin(), unique(c.begin(), c.end()))))
#ifdef BALBIT
#define IOS()
#define bug(...)                                                               \\
  fprintf(stderr, "#%d (%s) = ", __LINE__, #__VA_ARGS__), _do(__VA_ARGS__);
template <typename T> void _do(T &&x) { cerr << x << endl; }
template <typename T, typename... S> void _do(T &&x, S &&...y) {
  cerr << x << ", ";
  _do(y...);
}
#else
#define IOS()                                                                  \\
  ios_base::sync_with_stdio(0);                                                \\
  cin.tie(0);
#define endl '\\n'
#define bug(...)
#endif

const int iinf = 1e9 + 10;
const ll inf = 1ll << 60;
const ll mod = 1e9 + 7;

void GG() {
  cout << "0\\n";
  exit(0);
}

ll mpow(ll a, ll n, ll mo = mod) { // a^n % mod
  ll re = 1;
  while (n > 0) {
    if (n & 1)
      re = re * a % mo;
    a = a * a % mo;
    n >>= 1;
  }
  return re;
}

ll inv(ll b, ll mo = mod) {
  if (b == 1)
    return b;
  return (mo - mo / b) * inv(mo % b, mo) % mo;
}

const int maxn = 2e6 + 5;

int to[maxn][26];
int hv[maxn][26];
int NOW = 1;

void add(string x) {
  int at = 0;
  vector<int> me(26);
  for (char c : x)
    me[c - 'a']++;
  for (int i = 0; i < SZ(x); ++i) {
    for (int j = 0; j < 26; ++j)
      hv[at][j] += me[j] != 0;
    //        if (i == SZ(x)) break;
    int c = x[i] - 'a';
    me[c - 'a']--;
    if (to[at][c] != -1) {
      at = to[at][c];
    } else {
      to[at][c] = NOW;
      at = NOW++;
    }
  }
}

ll gt(string x) {
  int at = 0;
  for (int i = 0; i < SZ(x) - 1; ++i) {
    if (to[at][x[i] - 'a'] == -1)
      return 0;
    at = to[at][x[i] - 'a'];
  }
  return hv[at][x.back() - 'a'];
}

signed main() {
  IOS();
  int n;
  cin >> n;
  memset(to, -1, sizeof to);
  vector<string> v;
  for (int i = 0; i < n; ++i) {
    string s;
    cin >> s;
    reverse(ALL(s));
    v.pb(s);
  }
  sort(ALL(v), [&](string a, string b) { return SZ(a) > SZ(b); });
  ll re = 0;
  for (string s : v) {
    bug(s);
    re += gt(s);
    add(s);
  }
  cout << re << endl;
}