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

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

int main() {
  string str;
  string kekka = "";
  int cnt = 0;

  cin >> str;

  if (str == "?") {
    cout << "D";
    return 0;
  } else if (str == "P" || str == "D") {
    cout << str;
    return 0;
  }

  for (int i = 0; i < str.size(); i++) {
    cnt = 0;

    if (str.at(i) == '?') {
      if (i == 0) {
        for (int j = i + 1; j < str.size(); j++) {
          if (str.at(j) == 'D' || str.at(j) == '?') {
            cnt++;
          } else {
            break;
          }
        }

        if (cnt >= 2) {
          for (int j = i; j < i + cnt; j++) {
            str.at(j) = 'D';
          }
          continue;
        }

        if (str.at(i + 1) == 'P') {
          // ?P -> DP
          str.at(i) = 'D';
        } else if (str.at(i + 1) == 'D') {
          // ?D -> PD
          str.at(i) = 'P';
        } else {
          // ?? -> P?
          str.at(i) = 'P';
        }
      } else if (i == str.size() - 1) {
        if (str.at(i - 1) == 'P') {
          // P? -> PD
          str.at(i) = 'D';
        } else if (str.at(i - 1) == 'D') {
          // D? -> DD
          str.at(i) = 'D';
        }
      } else {
        for (int j = i + 1; j < str.size(); j++) {
          if (str.at(j) == 'D' || str.at(j) == '?') {
            cnt++;
          } else {
            break;
          }
        }

        if (cnt >= 2) {
          for (int j = i; j < i + cnt; j++) {
            str.at(j) = 'D';
          }
          continue;
        }

        if (str.at(i - 1) == 'P') {
          // P? -> PD
          str.at(i) = 'D';
        } else if (str.at(i - 1) == 'D') {
          // D? -> DD
          if (str.at(i + 1) == 'D') {
            str.at(i) = 'P';
          } else {
            str.at(i) = 'D';
          }
        } else if (str.at(i + 1) == 'P') {
          // ?P -> DP
          str.at(i) = 'D';
        } else if (str.at(i + 1) == 'D') {
          // ?D -> PD
          str.at(i) = 'P';
        } else {
          // ?? -> P?
          str.at(i) = 'P';
        }
      }
    }
  }

  cout << str;
}


Error: WA

Fixed submission:

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

int main() {
  string str;
  string kekka = "";
  int cnt = 0;

  cin >> str;
  for (int i = 0; i < str.size(); i++) {
    cnt = 0;

    if (str.at(i) == '?') {
      if (i == 0) {
        for (int j = i + 1; j < str.size(); j++) {
          if (str.at(j) == 'D' || str.at(j) == '?') {
            cnt++;
          } else {
            break;
          }
        }

        if (cnt >= 2) {
          for (int j = i; j < i + cnt; j++) {
            str.at(j) = 'D';
          }
          continue;
        }

        if (str.at(i + 1) == 'P') {
          // ?P -> DP
          str.at(i) = 'D';
        } else if (str.at(i + 1) == 'D') {
          // ?D -> PD
          str.at(i) = 'P';
        } else {
          // ?? -> P?
          str.at(i) = 'P';
        }
      } else if (i == str.size() - 1) {
        if (str.at(i - 1) == 'P') {
          // P? -> PD
          str.at(i) = 'D';
        } else if (str.at(i - 1) == 'D') {
          // D? -> DD
          str.at(i) = 'D';
        }
      } else {
        for (int j = i + 1; j < str.size(); j++) {
          if (str.at(j) == 'D' || str.at(j) == '?') {
            cnt++;
          } else {
            break;
          }
        }

        if (cnt >= 2) {
          for (int j = i; j < i + cnt; j++) {
            str.at(j) = 'D';
          }
          continue;
        }

        if (str.at(i - 1) == 'P') {
          // P? -> PD
          str.at(i) = 'D';
        } else if (str.at(i - 1) == 'D') {
          // D? -> DD
          if (str.at(i + 1) == 'D') {
            str.at(i) = 'P';
          } else {
            str.at(i) = 'P';
          }
        } else if (str.at(i + 1) == 'P') {
          // ?P -> DP
          str.at(i) = 'D';
        } else if (str.at(i + 1) == 'D') {
          // ?D -> PD
          str.at(i) = 'P';
        } else {
          // ?? -> P?
          str.at(i) = 'P';
        }
      }
    }
  }

  cout << str;
}