Problem p00776 (C++) — buggy submission, verdict: Time Limit Exceeded

#include <bits/stdc++.h>
using namespace std;

#define fi first
#define se second
#define repl(i, a, b) for (int i = (int)(a); i < (int)(b); i++)
#define repr(i, n) for (int i = (int)(n - 1); i >= 0; i--)
#define rep(i, n) repl(i, 0, n)
#define each(itr, v) for (auto itr : v)
#define pb(s) push_back(s)
#define all(x) (x).begin(), (x).end()
#define dbg(x) cout << #x " = " << x << endl
#define print(x) cout << x << endl
#define maxch(x, y) x = max(x, y)
#define minch(x, y) x = min(x, y)
#define uni(x) x.erase(unique(all(x)), x.end())
#define exist(x, y) (find(all(x), y) != x.end())
#define bcnt(x) bitset<32>(x).count()

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> P;
typedef pair<P, int> PPI;
typedef pair<int, P> PIP;
typedef pair<ll, ll> PL;
typedef pair<P, ll> PPL;
typedef set<char> S;

#define INF INT_MAX / 3
#define MAX_N 1000000001

vector<string> v;

int main() {
  cin.sync_with_stdio(false);
  string s, tmp, check;
  while (cin >> s, s[0] != '#') {
    v.clear();
    set<string> set;
    rep(i, 1 << s.length()) {
      tmp = s;
      rep(j, s.length()) {
        if (((1 << j) & i) && tmp[j] < 'z')
          tmp[j] = (char)(tmp[j] + 1);
      }

      check = tmp;
      bool alphabet[26] = {};
      rep(i, check.length()) {
        if (check[i] > 'a' && !alphabet[check[i] - 'a']) {
          alphabet[check[i] - 'a'] = true;
          check[i] = (char)(check[i] - 1);
        }
      }

      if (check == s)
        set.insert(tmp);
    }

    each(itr, set) v.pb(itr);
    sort(all(v));

    cout << v.size() << endl;
    if (v.size() > 10) {
      rep(i, 5) cout << v[i] << endl;
      repr(i, 5) cout << v[v.size() - i - 1] << endl;
    } else {
      rep(i, v.size()) cout << v[i] << endl;
    }
  }

  return 0;
}

Error: TLE

Fixed submission:

#include <bits/stdc++.h>
using namespace std;

#define fi first
#define se second
#define repl(i, a, b) for (int i = (int)(a); i < (int)(b); i++)
#define repr(i, n) for (int i = (int)(n - 1); i >= 0; i--)
#define rep(i, n) repl(i, 0, n)
#define each(itr, v) for (auto itr : v)
#define pb(s) push_back(s)
#define all(x) (x).begin(), (x).end()
#define dbg(x) cout << #x " = " << x << endl
#define print(x) cout << x << endl
#define maxch(x, y) x = max(x, y)
#define minch(x, y) x = min(x, y)
#define uni(x) x.erase(unique(all(x)), x.end())
#define exist(x, y) (find(all(x), y) != x.end())
#define bcnt(x) bitset<32>(x).count()

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> P;
typedef pair<P, int> PPI;
typedef pair<int, P> PIP;
typedef pair<ll, ll> PL;
typedef pair<P, ll> PPL;
typedef set<char> S;

#define INF INT_MAX / 3
#define MAX_N 1000000001

vector<string> v;

bool check(string s, string ans) {
  S set;
  rep(i, s.length()) {
    if (s[i] > 'a' && !set.count(s[i])) {
      set.insert(s[i]);
      s[i] = (char)(s[i] - 1);
    }
  }
  return (ans == s);
}

int main() {
  cin.sync_with_stdio(false);
  string s, tmp;
  while (cin >> s, s[0] != '#') {
    v.clear();
    set<string> set;
    rep(i, 1 << s.length()) {
      tmp = s;
      rep(j, s.length()) {
        if (((1 << j) & i) && tmp[j] < 'z')
          tmp[j] = (char)(tmp[j] + 1);
      }
      if (check(tmp, s))
        set.insert(tmp);
    }

    each(itr, set) v.pb(itr);
    sort(all(v));

    cout << v.size() << endl;
    if (v.size() > 10) {
      rep(i, 5) cout << v[i] << endl;
      rep(i, 5) cout << v[v.size() - i - 1] << endl;
    } else {
      rep(i, v.size()) cout << v[i] << endl;
    }
  }

  return 0;
}