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

#pragma GCC optimize("Ofast")

#include <bits/stdc++.h>
#include <iostream>
#include <queue>
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;

// マクロ
// forループ関係
// 引数は、(ループ内変数,動く範囲)か(ループ内変数,始めの数,終わりの数)、のどちらか
// Dがついてないものはループ変数は1ずつインクリメントされ、Dがついてるものはループ変数は1ずつデクリメントされる
#define REP(i, n) for (ll i = 0; i < (ll)(n); i++)
#define REPD(i, n) for (ll i = n - 1; i >= 0; i--)
#define FOR(i, a, b) for (ll i = a; i <= (ll)(b); i++)
#define FORD(i, a, b) for (ll i = a; i >= (ll)(b); i--)
// xにはvectorなどのコンテナ
#define ALL(x) (x).begin(), (x).end() // sortなどの引数を省略したい
#define SIZE(x) ((ll)(x).size())      // sizeをsize_tからllに直しておく
#define MAX(x) *max_element(ALL(x))   // 最大値を求める
#define MIN(x) *min_element(ALL(x))   // 最小値を求める
#define D()
// 定数
#define INF 1000000000000 // 10^12:極めて大きい値,∞
#define MOD 1000000007    // 10^9+7:合同式の法
#define MAXR 100000 // 10^5:配列の最大のrange(素数列挙などで使用)
// 略記
#define PB push_back // vectorヘの挿入
#define MP make_pair // pairのコンストラクタ
#define F first      // pairの一つ目の要素
#define S second     // pairの二つ目の要素

void printVector(const std::vector<double> &vec) {
  for (double value : vec) {
    std::cout << value << " ";
  }
  std::cout << std::endl;
}

int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);

  ll n, k;
  std::cin >> n >> k;
  // std::vector<std::vector<int>> a;
  ll a[2][200002] = {0};
  std::vector<int> kiroku;
  for (int i = 0; i < n; i++) {
    std::cin >> a[0][i];
  }

  int now = 1;
  ll point = 0;
  bool flag = false;

  kiroku.push_back(now);
  for (ll i = 0; i < k; i++) {
    if (a[1][now - 1] > 0) {
      point = i;
      flag = true;
      break;
    }
    a[1][now - 1] = i;
    now = a[0][now - 1];
    kiroku.push_back(now);
  }

  if (flag) {
    ll syuuki = point - a[1][now - 1];
    int nokori = (k - point) % syuuki;
    std::cout << kiroku[a[1][now - 1] + nokori] << '\\n';
  } else {
    std::cout << now << '\\n';
  }

  // for ( int i = 0 ; i < nokori ; i++ ) {
  // 	now = a[0][now-1];
  // }
  return 0;
}


Error: 0

Fixed submission:

#pragma GCC optimize("Ofast")

#include <bits/stdc++.h>
#include <iostream>
#include <queue>
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;

// マクロ
// forループ関係
// 引数は、(ループ内変数,動く範囲)か(ループ内変数,始めの数,終わりの数)、のどちらか
// Dがついてないものはループ変数は1ずつインクリメントされ、Dがついてるものはループ変数は1ずつデクリメントされる
#define REP(i, n) for (ll i = 0; i < (ll)(n); i++)
#define REPD(i, n) for (ll i = n - 1; i >= 0; i--)
#define FOR(i, a, b) for (ll i = a; i <= (ll)(b); i++)
#define FORD(i, a, b) for (ll i = a; i >= (ll)(b); i--)
// xにはvectorなどのコンテナ
#define ALL(x) (x).begin(), (x).end() // sortなどの引数を省略したい
#define SIZE(x) ((ll)(x).size())      // sizeをsize_tからllに直しておく
#define MAX(x) *max_element(ALL(x))   // 最大値を求める
#define MIN(x) *min_element(ALL(x))   // 最小値を求める
#define D()
// 定数
#define INF 1000000000000 // 10^12:極めて大きい値,∞
#define MOD 1000000007    // 10^9+7:合同式の法
#define MAXR 100000 // 10^5:配列の最大のrange(素数列挙などで使用)
// 略記
#define PB push_back // vectorヘの挿入
#define MP make_pair // pairのコンストラクタ
#define F first      // pairの一つ目の要素
#define S second     // pairの二つ目の要素

void printVector(const std::vector<double> &vec) {
  for (double value : vec) {
    std::cout << value << " ";
  }
  std::cout << std::endl;
}

int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);

  ll n, k;
  std::cin >> n >> k;
  // std::vector<std::vector<int>> a;
  ll a[2][200002] = {0};
  std::vector<int> kiroku;
  for (int i = 0; i < n; i++) {
    std::cin >> a[0][i];
  }

  int now = 1;
  ll point;

  kiroku.push_back(now);
  for (ll i = 0; i < k; i++) {
    if (a[1][now - 1] > 0) {
      point = i;
      break;
    }
    a[1][now - 1] = i;
    now = a[0][now - 1];
    kiroku.push_back(now);
  }

  ll syuuki = point - a[1][now - 1];
  int nokori = (k - point) % syuuki;

  // for ( int i = 0 ; i < nokori ; i++ ) {
  // 	now = a[0][now-1];
  // }
  // std::cout << now << '\\n';
  std::cout << kiroku[a[1][now - 1] + nokori] << '\\n';
  return 0;
}