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

//////////////////////////
//      _        ____   //
//  U  /"\\  u U /"___|  //
//   \\/ _ \\/  \\| | u    //
//   / ___ \\   | |/__   //
//  /_/   \\_\\   \\____|  //
//   \\\\    >>  _// \\\\   //
//  (__)  (__)(__)(__)  //
//  Compro by NULL_CT©  //
//////////////////////////
// STL libs
#include <algorithm>
#include <array>
#include <bitset>
#include <cctype>
#include <chrono>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdint>
#include <cstdlib>
#include <deque>
#include <functional>
#include <iomanip>
#include <ios>
#include <iostream>
#include <iterator>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <tuple>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>

#define REP(I, LIM) for (int I = 0; I < (LIM); I++)
#define ALL(LIST) (LIST.begin()), (LIST.end())

using namespace std;

constexpr int MOD = 10000007;
constexpr long INF = LONG_MAX;

vector<long> divisor(long n) {
  vector<long> head, tail;
  for (long i = 1; i * i <= n; i++) {
    if (n % i == 0) {
      head.push_back(i);
      if (i * i != n)
        tail.push_back(n / i);
    }
  }
  head.insert(head.end(), tail.rbegin(), tail.rend());
  return (head);
}

struct init {
  init() {
    cin.tie(0);
    ios::sync_with_stdio(0);
    // cout<<fixed<<setprecision(20);
  }
} init;

/*----------------------------*/

int main() {
  long long x, k, d;
  cin >> x >> k >> d;
  x = llabs(x);

  if (k <= x / d) { // 往復しないパターン
    cout << x - k * d << "\\n";
    return 0;
  }
  k = k - x / d;
  x %= d;
  k %= 2;
  if (k == 0) {
    cout << x << "\\n";
    return 0;
  } else {
    cout << llabs(x - d) << "\\n";
    return 0;
  }
}


Error: 0

Fixed submission:

//////////////////////////
//      _        ____   //
//  U  /"\\  u U /"___|  //
//   \\/ _ \\/  \\| | u    //
//   / ___ \\   | |/__   //
//  /_/   \\_\\   \\____|  //
//   \\\\    >>  _// \\\\   //
//  (__)  (__)(__)(__)  //
//  Compro by NULL_CT©  //
//////////////////////////
// STL libs
#include <algorithm>
#include <array>
#include <bitset>
#include <cctype>
#include <chrono>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdint>
#include <cstdlib>
#include <deque>
#include <functional>
#include <iomanip>
#include <ios>
#include <iostream>
#include <iterator>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <tuple>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>

#define REP(I, LIM) for (int I = 0; I < (LIM); I++)
#define ALL(LIST) (LIST.begin()), (LIST.end())

using namespace std;

constexpr int MOD = 10000007;
constexpr long INF = LONG_MAX;

vector<long> divisor(long n) {
  vector<long> head, tail;
  for (long i = 1; i * i <= n; i++) {
    if (n % i == 0) {
      head.push_back(i);
      if (i * i != n)
        tail.push_back(n / i);
    }
  }
  head.insert(head.end(), tail.rbegin(), tail.rend());
  return (head);
}

struct init {
  init() {
    cin.tie(0);
    ios::sync_with_stdio(0);
    // cout<<fixed<<setprecision(20);
  }
} init;

/*----------------------------*/

int main() {
  long long x, k, d;
  cin >> x >> k >> d;
  x = llabs(x);

  if (k <= x / d) { // 往復しないパターン
    cout << x - k * d << "\\n";
    return 0;
  }
  k = k - x / d;
  x %= d;
  if (k % 2 == 0) { // 上の答えそのまま
    cout << x << "\\n";
    return 1;
  } else {
    if (x < 0) {
      cout << llabs(x + d) << "\\n";
      return 0;
    } else if (x > 0) {
      cout << llabs(x - d) << "\\n";
      return 0;
    } else {
      cout << d << "\\n";
      return 0;
    }
  }
}