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

#include <bits/stdc++.h> //Carefully Crafted by hetp111
using namespace std;
#define int long long
#define double long double
#define all(v) (v).begin(), (v).end()
#define vi vector<int>
#define vvi vector<vi>
#define pii pair<int, int>
#define vii vector<pii>
#define MOD 1000000007
#define MOD2 998244353
#define MOD3 1000000009
#define PI acos(-1)
#define eps (1e-8)
#define INF (1e18)
#define FASTER                                                                 \\
  ios_base::sync_with_stdio(0);                                                \\
  cin.tie(0)
template <class A, class B>
ostream &operator<<(ostream &out, const pair<A, B> &a) {
  return out << "(" << a.first << "," << a.second << ")";
}
template <class A> ostream &operator<<(ostream &out, const vector<A> &a) {
  for (const A &it : a)
    out << it << " ";
  return out;
}
template <class A, class B> istream &operator>>(istream &in, pair<A, B> &a) {
  return in >> a.first >> a.second;
}
template <class A> istream &operator>>(istream &in, vector<A> &a) {
  for (A &i : a)
    in >> i;
  return in;
}
ifstream cinn("ride.in");
ofstream coutt("ride.out");
int poww(const int &a, int b, const int &m = MOD) {
  if (b == 0)
    return 1;
  int x = poww(a, b / 2, m);
  x = x * x % m;
  if (b & 1)
    x = x * a % m;
  return x;
}
int ceil(const int &a, const int &b) { return (a + b - 1) / b; }
////Read:
// Check corner cases, n==1;
//
////Some function:
//__builtin_popcountll(),

signed main() {
  FASTER;
  int n, k;
  cin >> n >> k;
  int zero = 0, pos = 0, neg = 0;
  vii v;
  for (int i = 0; i < n; i++) {
    int in;
    cin >> in;
    if (in > 0)
      v.push_back({in, 0}), pos++;
    if (in < 0)
      v.push_back({-in, 1}), neg++;
    if (in == 0)
      zero++;
  }
  sort(all(v));
  reverse(all(v));

  if (pos + neg < k && zero) {
    cout << 0;
    return 0;
  }

  int del = 0, idn = -1, idp = -1;
  for (int i = 0; i < k; i++) {
    del += v[i].second;
    if (v[i].second)
      idn = i;
    else
      idp = i;
  }

  if (del % 2 == 0) {
    int ans = 1;
    for (int i = 0; i < k; i++) {
      ans = ans * v[i].first % MOD;
    }
    cout << ans;
  } else {

    int id2p = -1, id2n = -1;
    for (int i = k; i < v.size(); i++) {
      if (v[i].second == 0 && id2p == -1) {
        id2p = i;
      }
      if (v[i].second == 1 && id2n == -1) {
        id2n = i;
      }
    }

    if (idp != -1) {
      if (id2p != -1 && id2n != -1) {
        if (v[idp].first * v[id2p].first > v[idn].first * v[id2n].first)
          swap(v[id2p], v[idn]);
        else
          swap(v[id2n], v[idp]);
        int ans = 1;
        for (int i = 0; i < k; i++) {
          ans = ans * v[i].first % MOD;
        }
        cout << ans;
      } else if (id2p != -1) {
        swap(v[idn], v[id2p]);
        int ans = 1;
        for (int i = 0; i < k; i++) {
          ans = ans * v[i].first % MOD;
        }
        cout << ans;
      } else if (id2n != -1) {
        swap(v[idp], v[id2n]);
        int ans = 1;
        for (int i = 0; i < k; i++) {
          ans = ans * v[i].first % MOD;
        }
        cout << ans;
      } else {

        if (zero) {
          cout << 0;
          return 0;
        }
        reverse(all(v));
        int ans = 1;
        for (int i = 0; i < k; i++)
          ans = ans * v[i].first % MOD;
        cout << MOD - ans;
      }
    } else {

      if (id2p != -1) {
        swap(v[idn], v[id2p]);
        int ans = 1;
        for (int i = 0; i < k; i++) {
          ans = ans * v[i].first % MOD;
        }
        cout << ans;

      } else {

        if (zero) {
          cout << 0;
          return 0;
        }
        reverse(all(v));
        int ans = 1;
        for (int i = 0; i < k; i++)
          ans = ans * v[i].first % MOD;
        cout << MOD - ans;
      }
    }
  }
}

Error: WA

Fixed submission:

#include <bits/stdc++.h> //Carefully Crafted by hetp111
using namespace std;
#define int long long
#define double long double
#define all(v) (v).begin(), (v).end()
#define vi vector<int>
#define vvi vector<vi>
#define pii pair<int, int>
#define vii vector<pii>
#define MOD 1000000007
#define MOD2 998244353
#define MOD3 1000000009
#define PI acos(-1)
#define eps (1e-8)
#define INF (1e18)
#define FASTER                                                                 \\
  ios_base::sync_with_stdio(0);                                                \\
  cin.tie(0)
template <class A, class B>
ostream &operator<<(ostream &out, const pair<A, B> &a) {
  return out << "(" << a.first << "," << a.second << ")";
}
template <class A> ostream &operator<<(ostream &out, const vector<A> &a) {
  for (const A &it : a)
    out << it << " ";
  return out;
}
template <class A, class B> istream &operator>>(istream &in, pair<A, B> &a) {
  return in >> a.first >> a.second;
}
template <class A> istream &operator>>(istream &in, vector<A> &a) {
  for (A &i : a)
    in >> i;
  return in;
}
ifstream cinn("ride.in");
ofstream coutt("ride.out");
int poww(const int &a, int b, const int &m = MOD) {
  if (b == 0)
    return 1;
  int x = poww(a, b / 2, m);
  x = x * x % m;
  if (b & 1)
    x = x * a % m;
  return x;
}
int ceil(const int &a, const int &b) { return (a + b - 1) / b; }
////Read:
// Check corner cases, n==1;
//
////Some function:
//__builtin_popcountll(),

signed main() {
  FASTER;
  int n, k;
  cin >> n >> k;
  int zero = 0, pos = 0, neg = 0;
  vii v;
  for (int i = 0; i < n; i++) {
    int in;
    cin >> in;
    if (in > 0)
      v.push_back({in, 0}), pos++;
    if (in < 0)
      v.push_back({-in, 1}), neg++;
    if (in == 0)
      zero++;
  }
  sort(all(v));
  reverse(all(v));

  if (pos + neg < k && zero) {
    cout << 0;
    return 0;
  }

  int del = 0, idn = -1, idp = -1;
  for (int i = 0; i < k; i++) {
    del += v[i].second;
    if (v[i].second)
      idn = i;
    else
      idp = i;
  }

  if (del % 2 == 0) {
    int ans = 1;
    for (int i = 0; i < k; i++) {
      ans = ans * v[i].first % MOD;
    }
    cout << ans;
  } else {

    int id2p = -1, id2n = -1;
    for (int i = k; i < v.size(); i++) {
      if (v[i].second == 0 && id2p == -1) {
        id2p = i;
      }
      if (v[i].second == 1 && id2n == -1) {
        id2n = i;
      }
    }

    if (id2p != -1 && id2n != -1) {
      if (v[id2n] > v[id2p])
        swap(v[id2n], v[idp]);
      else
        swap(v[id2p], v[idn]);

      int ans = 1;
      for (int i = 0; i < k; i++) {
        ans = ans * v[i].first % MOD;
      }
      cout << ans;

    } else if (id2p != -1) {
      swap(v[idn], v[id2p]);
      int ans = 1;
      for (int i = 0; i < k; i++) {
        ans = ans * v[i].first % MOD;
      }
      cout << ans;

    } else if (id2n != -1 && idp != -1) {
      swap(v[idp], v[id2n]);
      int ans = 1;
      for (int i = 0; i < k; i++) {
        ans = ans * v[i].first % MOD;
      }
      cout << ans;

    } else {

      if (zero) {
        cout << 0;
        return 0;
      }

      reverse(all(v));
      int ans = 1;
      for (int i = 0; i < k; i++) {
        ans = ans * v[i].first % MOD;
      }
      cout << MOD - ans;
    }
  }
}