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

#include <algorithm>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <unordered_map>
#include <vector>
#define deg(x) cout << #x << "=" << x << endl;
#define fd(x) for (int i = 0; i < x; i++)
#define fdd(a, x) for (int i = a; i < x; i++)
#define fx(x, n) for (int i = n - 1; i >= x; i--)
#define mst(x) memset(x, 0, sizeof(x));
#define fi first
#define se second
#define TB ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
#define ok "ok"
#define HH puts("");
#define ls rt << 1
#define rs rt << 1 | 1
#define pb(a, b) a.push_back(b);
#define FIN freopen("1.in", "r", stdin);
#define FOUT freopen("1.out", "w", stdout);
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<string, int> pss;
typedef unsigned long long ull;
const ll mod = 1e9 + 7;
const ll inf = 1e18;
const long double eps = 1e-8;
ll qpow(ll a, ll b, ll m) {
  ll r = 1;
  a %= m;
  for (; b; b >>= 1) {
    if (b & 1)
      r = r * a % m;
    a = a * a % m;
  }
  return r;
}
const double pi = acos(-1);

vector<int> v;

char s[203040];
int n, k, c, len;
bool vis[0];
int f[203040];
vector<int> q;
vector<int> ans;
unordered_map<int, int> mp;
int main() {
  TB cin >> n >> k >> c;
  cin >> s;
  len = strlen(s);
  int i = 0, flag = 0, flog = 0;
  f[0] = (s[0] == 'o');
  if (s[0] == 'o') {
    flag += c;
    flog++;
    mp[0] = 1;
    v.push_back(0);
    q.push_back(0);
  }
  fdd(1, len) {
    // f[i]+=f[i-1];
    if (s[i] == 'o') {
      // f[i]++;
      // q.push_back(0-i);
      // deg(flag)
      if (i > flag) {
        mp[i] = 1;
        flag = i + c;
        flog++;
      }
    }
  }
  // sort(q.begin(),q.end());
  // f[len]=f[len-1];
  if (flog > k)
    return 0;
  flag = len;
  for (int i = len - 1; i >= 0; i--) {
    if (s[i] == 'o') {
      if (i < flag) {
        // vector<int>::iterator it = find(v.begin(), v.end(), i);
        if (mp[i])
          ans.push_back(i);
        flag = i - c;
        flog++;
      }
    }
  }
  //    flog=len-1;
  //    deg(v[1])deg(flog)
  //    deg(v[0])
  //    for(int i=v.size()-1;i>=0;i--){
  //        if(f[flog]-f[v[i]]==0||flog-v[i]==c+1){
  //            ans.push_back(v[i]);
  //        }else{
  //            int g=0-(flog-c);
  //            int j=upper_bound(q.begin(),q.end(),g)-q.begin();
  //            flog=-(q[j]);
  //        }
  //    }
  if (ans.size()) {
    for (int i = ans.size() - 1; i >= 0; i--)
      cout << ans[i] + 1 << '\\n';
  }
  return 0;
}


Error: TLE

Fixed submission:

#include <algorithm>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <unordered_map>
#include <vector>
#define deg(x) cout << #x << "=" << x << endl;
#define fd(x) for (int i = 0; i < x; i++)
#define fdd(a, x) for (int i = a; i < x; i++)
#define fx(x, n) for (int i = n - 1; i >= x; i--)
#define mst(x) memset(x, 0, sizeof(x));
#define fi first
#define se second
#define TB ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
#define ok "ok"
#define HH puts("");
#define ls rt << 1
#define rs rt << 1 | 1
#define pb(a, b) a.push_back(b);
#define FIN freopen("1.in", "r", stdin);
#define FOUT freopen("1.out", "w", stdout);
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<string, int> pss;
typedef unsigned long long ull;
const ll mod = 1e9 + 7;
const ll inf = 1e18;
const long double eps = 1e-8;
ll qpow(ll a, ll b, ll m) {
  ll r = 1;
  a %= m;
  for (; b; b >>= 1) {
    if (b & 1)
      r = r * a % m;
    a = a * a % m;
  }
  return r;
}
const double pi = acos(-1);

vector<int> v;

char s[203040];
int n, k, c, len;
bool vis[0];
int f[203040];
vector<int> q;
vector<int> ans;
int main() {
  TB cin >> n >> k >> c;
  cin >> s;
  len = strlen(s);
  int i = 0, flag = 0, flog = 0;
  f[0] = (s[0] == 'o');
  if (s[0] == 'o') {
    flag += c;
    flog++;
    v.push_back(0);
    q.push_back(0);
  }
  fdd(1, len) {
    // f[i]+=f[i-1];
    if (s[i] == 'o') {
      // f[i]++;
      // q.push_back(0-i);
      // deg(flag)
      if (i > flag) {
        v.push_back(i);
        flag = i + c;
        flog++;
      }
    }
  }
  // sort(q.begin(),q.end());
  // f[len]=f[len-1];
  if (flog > k)
    return 0;
  flag = len;
  for (int i = len - 1; i >= 0; i--) {
    if (s[i] == 'o') {
      if (i < flag) {
        vector<int>::iterator it = find(v.begin(), v.end(), i);
        if (it != v.end())
          ans.push_back(*it);
        flag = i - c;
        flog++;
      }
    }
  }
  //    flog=len-1;
  //    deg(v[1])deg(flog)
  //    deg(v[0])
  //    for(int i=v.size()-1;i>=0;i--){
  //        if(f[flog]-f[v[i]]==0||flog-v[i]==c+1){
  //            ans.push_back(v[i]);
  //        }else{
  //            int g=0-(flog-c);
  //            int j=upper_bound(q.begin(),q.end(),g)-q.begin();
  //            flog=-(q[j]);
  //        }
  //    }
  if (ans.size()) {
    for (int i = ans.size() - 1; i >= 0; i--)
      cout << ans[i] + 1 << '\\n';
  }
  return 0;
}