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

#include <algorithm>
#include <bitset>
#include <cassert>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <limits>
#include <map>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <sstream>
#include <stack>
#include <unordered_map>
#include <unordered_set>
#include <vector>

#define len(X) ((int)(X).size())

#ifdef __LOCAL
#define DBG(X) cout << #X << "=" << (X) << '\\n';
#define SAY(X) cout << (X) << '\\n';
#else
#define DBG(X)
#define SAY(X)
#endif

using namespace std;

using ll = long long int;
using ull = unsigned long long int;
using ld = long double;
using pii = pair<int, int>;
using pll = pair<ll, ll>;

const int INT_INF = (int)(2e9);
const ll LL_INF = (ll)(2e18);

const int NIL = -1;
static mt19937 _g(time(nullptr));

std::string pad(int num) {
  char buffer[4];
  std::snprintf(buffer, sizeof(buffer), "%03d", num);
  return buffer;
}

inline ll randint(ll a, ll b) {
  ll w = (_g() << 31LL) ^ _g();
  return a + w % (b - a + 1);
}
inline void fast_io() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
};
template <typename T> inline T sign(T x) { return T(x > 0) - T(x < 0); }
template <typename T, typename S>
inline ostream &operator<<(ostream &os, const pair<T, S> p) {
  cout << "[" << p.first << ";" << p.second << "]";
  return os;
}
template <typename T>
inline ostream &operator<<(ostream &os, const vector<T> &v) {
  for (auto el : v)
    cout << el << " ";
  return os;
}
template <typename T> inline T fetch() {
  T ret;
  cin >> ret;
  return ret;
}
template <typename T> inline vector<T> fetch_vec(int sz) {
  vector<T> ret(sz);
  for (auto &elem : ret)
    cin >> elem;
  return ret;
}

#ifdef _MSC_VER
#include <intrin.h>
#define __builtin_popcount __popcnt
#endif

int solve() {
  int N, K, C;

  std::cin >> N >> K >> C;

  string days;
  cin >> days;

  vector<int> leftDays(N);
  vector<int> rightDays(N);

  leftDays[0] = 0;
  for (int i = 1; i < N; ++i) {
    if (days[i] == 'o' && i - C - 1 >= 0)
      leftDays[i] = leftDays[i - C - 1] + 1;
    else
      leftDays[i] = leftDays[i - 1];
  }

  rightDays[N - 1] = 0;
  for (int i = N - 2; i >= 0; --i) {
    if (days[i] == 'o' && i + C + 1 < N)
      rightDays[i] = rightDays[i + C + 1] + 1;
    else
      rightDays[i] = rightDays[i + 1];
  }

  vector<int> out;
  for (int i = 0; i < N; ++i) {
    if (days[i] == 'o' && leftDays[i] + rightDays[i] + 1 == K &&
        (i == 0 || (i > 0 && leftDays[i - 1] != leftDays[i])) &&
        (i == N - 1 || (i < N - 1 && rightDays[i] != rightDays[i + 1])))
      out.push_back(i + 1);
  }

  for (int i : out)
    cout << i << endl;

  return 0;
}

int main() {
  //    std::cout << solve() << std::endl;
  solve();

  return 0;
}

Error: TLE

Fixed submission:

#include <algorithm>
#include <bitset>
#include <cassert>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <limits>
#include <map>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <sstream>
#include <stack>
#include <unordered_map>
#include <unordered_set>
#include <vector>

#define len(X) ((int)(X).size())

#ifdef __LOCAL
#define DBG(X) cout << #X << "=" << (X) << '\\n';
#define SAY(X) cout << (X) << '\\n';
#else
#define DBG(X)
#define SAY(X)
#endif

using namespace std;

using ll = long long int;
using ull = unsigned long long int;
using ld = long double;
using pii = pair<int, int>;
using pll = pair<ll, ll>;

const int INT_INF = (int)(2e9);
const ll LL_INF = (ll)(2e18);

const int NIL = -1;
static mt19937 _g(time(nullptr));

std::string pad(int num) {
  char buffer[4];
  std::snprintf(buffer, sizeof(buffer), "%03d", num);
  return buffer;
}

inline ll randint(ll a, ll b) {
  ll w = (_g() << 31LL) ^ _g();
  return a + w % (b - a + 1);
}
inline void fast_io() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
};
template <typename T> inline T sign(T x) { return T(x > 0) - T(x < 0); }
template <typename T, typename S>
inline ostream &operator<<(ostream &os, const pair<T, S> p) {
  cout << "[" << p.first << ";" << p.second << "]";
  return os;
}
template <typename T>
inline ostream &operator<<(ostream &os, const vector<T> &v) {
  for (auto el : v)
    cout << el << " ";
  return os;
}
template <typename T> inline T fetch() {
  T ret;
  cin >> ret;
  return ret;
}
template <typename T> inline vector<T> fetch_vec(int sz) {
  vector<T> ret(sz);
  for (auto &elem : ret)
    cin >> elem;
  return ret;
}

#ifdef _MSC_VER
#include <intrin.h>
#define __builtin_popcount __popcnt
#endif

int solve() {
  int N, K, C;

  std::cin >> N >> K >> C;

  string days;
  cin >> days;

  set<int> pos;

  for (int i = 0; i < days.length(); ++i) {
    if (days[i] == 'o')
      pos.insert(i);
  }

  vector<int> res;

  for (auto it = pos.begin(); it != pos.end(); ++it) {

    int back = *it;
    int counter = 0;

    pos.erase(it);

    for (auto it2 = pos.begin(); it2 != pos.end();) {
      ++counter;

      if (counter == K)
        break;

      it2 = pos.upper_bound(*it2 + C);
    }

    if (counter < K)
      res.push_back(*it + 1);

    pos.insert(back);
    it = pos.find(back);
  }

  for (int i : res)
    cout << i << endl;

  return 0;
}

int main() {
  //    std::cout << solve() << std::endl;
  solve();

  return 0;
}