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

/*
これを入れて実行
g++ code.cpp
./a.out
 */

#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstring>
#include <deque>
#include <functional>
#include <iomanip>
#include <iostream>
#include <map>
#include <math.h>
#include <queue>
#include <set>
#include <stdio.h>
#include <string>
#include <tuple>
#include <unordered_map>
#include <utility>
#include <vector>

#define all(x) (x).begin(), (x).end()
#define rep(i, n) for (int i = 0; i < (int)(n); i++)

using namespace std;
typedef long long ll;
typedef long double ld;

int dy4[4] = {-1, 0, +1, 0};
int dx4[4] = {0, +1, 0, -1};
int dy8[8] = {-1, -1, 0, 1, 1, 1, 0, -1};
int dx8[8] = {0, 1, 1, 1, 0, -1, -1, -1};

const long long INF = 1LL << 62;
const ll MOD = 1e9 + 7;

bool greaterSecond(const pair<int, int> &f, const pair<int, int> &s) {
  return f.second > s.second;
}

ll gcd(ll a, ll b) {
  if (b == 0)
    return a;
  return gcd(b, a % b);
}

ll lcm(ll a, ll b) { return a / gcd(a, b) * b; }

ll conbinationMemo[100][100];

void cmemoInit() {
  rep(i, 100) {
    rep(j, 100) { conbinationMemo[i][j] = -1; }
  }
}

ll nCr(ll n, ll r) {
  if (conbinationMemo[n][r] != -1)
    return conbinationMemo[n][r];
  if (r == 0 || r == n) {
    return 1;
  } else if (r == 1) {
    return n;
  }
  return conbinationMemo[n][r] = (nCr(n - 1, r) + nCr(n - 1, r - 1));
}

ll nPr(ll n, ll r) {
  r = n - r;
  ll ret = 1;
  for (ll i = n; i >= r + 1; i--)
    ret *= i;
  return ret;
}
//-----------------------ここから-----------
int main(void) {
  ll n, m;
  cin >> n >> m;

  int now = m;
  vector<bool> used(n + 1, false);
  for (int i = 1; i <= n; i++) {
    if (used[i + now])
      break;
    cout << i << " " << i + now << endl;
    used[i] = true;
    used[i + now] = true;
    now -= 2;
    if (now < 1)
      break;
  }
  now = m - 1;
  for (int i = m + 2; i <= n; i++) {
    if (now < 1)
      break;
    if (used[i + now])
      break;
    cout << i << " " << i + now << endl;
    used[i] = true;
    used[i + now] = true;
    now -= 2;
  }
}


Error: WA

Fixed submission:

/*
これを入れて実行
g++ code.cpp
./a.out
 */

#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstring>
#include <deque>
#include <functional>
#include <iomanip>
#include <iostream>
#include <map>
#include <math.h>
#include <queue>
#include <set>
#include <stdio.h>
#include <string>
#include <tuple>
#include <unordered_map>
#include <utility>
#include <vector>

#define all(x) (x).begin(), (x).end()
#define rep(i, n) for (int i = 0; i < (int)(n); i++)

using namespace std;
typedef long long ll;
typedef long double ld;

int dy4[4] = {-1, 0, +1, 0};
int dx4[4] = {0, +1, 0, -1};
int dy8[8] = {-1, -1, 0, 1, 1, 1, 0, -1};
int dx8[8] = {0, 1, 1, 1, 0, -1, -1, -1};

const long long INF = 1LL << 62;
const ll MOD = 1e9 + 7;

bool greaterSecond(const pair<int, int> &f, const pair<int, int> &s) {
  return f.second > s.second;
}

ll gcd(ll a, ll b) {
  if (b == 0)
    return a;
  return gcd(b, a % b);
}

ll lcm(ll a, ll b) { return a / gcd(a, b) * b; }

ll conbinationMemo[100][100];

void cmemoInit() {
  rep(i, 100) {
    rep(j, 100) { conbinationMemo[i][j] = -1; }
  }
}

ll nCr(ll n, ll r) {
  if (conbinationMemo[n][r] != -1)
    return conbinationMemo[n][r];
  if (r == 0 || r == n) {
    return 1;
  } else if (r == 1) {
    return n;
  }
  return conbinationMemo[n][r] = (nCr(n - 1, r) + nCr(n - 1, r - 1));
}

ll nPr(ll n, ll r) {
  r = n - r;
  ll ret = 1;
  for (ll i = n; i >= r + 1; i--)
    ret *= i;
  return ret;
}
//-----------------------ここから-----------
int main(void) {
  ll n, m;
  cin >> n >> m;
  vector<pair<int, int>> arena;

  int c = 0;
  int now = 1;
  vector<bool> used(n + 1, false);
  for (int i = 1; i <= n; i++) {
    if (used[i])
      continue;
    if (c % 2 == 0) {
      if (!used[i - now > 0 ? i - now : n + (i - now)]) {
        arena.push_back({i, i - now > 0 ? i - now : n + (i - now)});
        used[i] = true;
        used[i - now > 0 ? i - now : n + (i - now)] = true;
      } else if (!used[i + now]) {
        arena.push_back({i, i + now});
        used[i] = true;
        used[i + now] = true;
      } else {
        continue;
      }

    } else {
      if (!used[i + now]) {
        arena.push_back({i, i + now});
        used[i] = true;
        used[i + now] = true;
      } else if (!used[i - now > 0 ? i - now : n + (i - now)]) {
        arena.push_back({i, i - now > 0 ? i - now : n + (i - now)});
        used[i] = true;
        used[i - now > 0 ? i - now : n + (i - now)] = true;
      } else {
        continue;
      }
    }

    c++;
    now++;
    if (c >= m)
      break;
  }

  rep(i, m) { cout << arena[i].first << " " << arena[i].second << endl; }

  // map<int,int> players;
  // for(int i = 1; i <= n; i++){
  //     players[i] = i;
  // }

  // vector<set<int>> check(n + 1);
  // int cnt = 0;
  // while(cnt++ != n){
  //     cout << cnt << endl;
  //     rep(i, m){
  //         if(check[players[arena[i].first]].find(players[arena[i].second]) !=
  //         check[players[arena[i].first]].end()){
  //             cout << "e1" << endl;
  //         }
  //         if(check[players[arena[i].second]].find(players[arena[i].first]) !=
  //         check[players[arena[i].second]].end()){
  //             cout << "e2" << endl;
  //         }
  //         cout << players[arena[i].first] << " " << players[arena[i].second]
  //         << endl;
  //         check[players[arena[i].first]].insert(players[arena[i].second]);
  //         check[players[arena[i].second]].insert(players[arena[i].first]);
  //     }
  //     for(auto &i : players){
  //         i.second--;
  //         if(i.second == 0){
  //             i.second = n;
  //         }
  //     }
  // }
}