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

#pragma GCC target("avx")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#include <bits/stdc++.h>
// #include <atcoder/all>
#define rep(i, n) for (int i = 0; i < (n); ++i)
typedef int64_t lint;
using namespace std;
using ll = long long;
using P = pair<ll, ll>;
using lb = long double;
// マクロ
// forループ関係
// 引数は、(ループ内変数,動く範囲)か(ループ内変数,始めの数,終わりの数)、のどちらか
// Dがついてないものはループ変数は1ずつインクリメントされ、Dがついてるものはループ変数は1ずつデクリメントされる
#define FOR(i, a, b) for (ll i = a; i <= (ll)(b); i++)
// xにはvectorなどのコンテナ
#define all(x) (x).begin(), (x).end() // sortなどの引数を省略したい
#define SI(x) ((ll)(x).size())        // sizeをsize_tからllに直しておく
#define MAX(x) *max_element(all(x))   // 最大値を求める
#define MIN(x) *min_element(all(x))   // 最小値を求める
#define debug(x) cerr << #x << ": " << x << "\\n" // 手動デバッグ
#define debugV(x)                                                              \\
  for (int i = 0; i < ((ll)(x).size()); i++)                                   \\
  cerr << #x << "at:" << i << ": " << x[i] << "\\n" // 手動デバッグ
#define YES(c) cout << ((c) ? "YES\\n" : "NO\\n"), 0
#define Yes(c) cout << ((c) ? "Yes\\n" : "No\\n"), 0
#define O(p) cout << p << "\\n", 0
#define OS(p) cout << p << " ", 0
#define ON(p) cout << p, 0
// 定数
#define INF 1000000000000 // 10^12:極めて大きい値,∞
#define inf 2147483647    // int値の最大値
#define MOD 1000000007    // 10^9+7:合同式の法
#define MAXR 100000 // 10^5:配列の最大のrange(素数列挙などで使用)
#define endl "\\n"   // endlを置き換える
// 略記
#define pb emplace_back                         // vectorヘの挿入
#define mp make_pair                            // pairのコンストラクタ
#define F first                                 // pairの一つ目の要素
#define S second                                // pairの二つ目の要素
#define CST(x) cout << fixed << setprecision(x) // 小数点以下の桁数指定

const int dy[4] = {1, 0, -1, 0};
const int dx[4] = {0, 1, 0, -1}; //^>v<

template <class T = int> T in() {
  T x;
  cin >> x;
  return (x);
}
template <class T> inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <class T> inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
int gcd(int a, int b) {
  if (b == 0)
    return a;
  else
    return gcd(b, a % b);
}
int lcm(int a, int b) { return a * b / gcd(a, b); }
int two(int n) {
  ll ans = 1;
  rep(i, n) { ans *= 2; }
  return ans;
}
int up_b(vector<ll> v, ll i) {
  int itr = upper_bound(all(v), i) - v.begin();
  if (itr == v.size()) {
    return -1;
  } else {
    return itr;
  }
}
int lo_b(vector<ll> v, ll i) {
  int itr = lower_bound(all(v), i) - v.begin();
  if (itr == v.size()) {
    return -1;
  } else {
    return itr;
  }
}

int d;
vector<int> c(26);
vector<vector<int>> s;
//------------------------------------------------------------
ll calc(vector<int> day, vector<vector<int>> s) {
  ll sum = 0;
  vector<int> last(26, 0);
  rep(i, d) {
    // debug(s[0][0]);
    sum += s[i][day[i] - 1];
    last[day[i] - 1] = i + 1;
    rep(j, 26) { sum -= c[j] * (i + 1 - last[j]); }
    // debugV(last);
  }
  return sum;
}

vector<int> solve(vector<vector<int>> s) {
  // ll sum=0;
  vector<int> last(26, 0);
  vector<int> day(d);
  rep(i, d) {
    // debug(s[0][0]);
    priority_queue<P> que;
    rep(k, 26) {
      ll tmp = 0;
      tmp += s[i][k];
      ll lasttmp = last[k];
      last[k] = i + 1;
      rep(j, 26) { tmp -= c[j] * (i + 1 - last[j]); }
      last[k] = lasttmp;
      que.push(mp(tmp, k));
    }
    day[i] = que.top().second + 1;
  }

  return day;
}

//------------------------------------------------------------
int main() {
  ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  //------------------------------------------------------------
  cin >> d;
  vector<vector<int>> s(d, vector<int>(26));
  rep(i, 26) cin >> c[i];
  rep(i, d) {
    rep(j, 26) { cin >> s[i][j]; }
  }
  vector<int> day(d);
  // rep(i,d)cin>>day[i];

  day = solve(s);

  rep(i, d) { O(day[i]); }

  //------------------------------------------------------------
  return 0;
}


Error: 0

Fixed submission:

#pragma GCC target("avx")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#include <bits/stdc++.h>
// #include <atcoder/all>
#define rep(i, n) for (int i = 0; i < (n); ++i)
typedef int64_t lint;
using namespace std;
using ll = long long;
using P = pair<ll, ll>;
using lb = long double;
// マクロ
// forループ関係
// 引数は、(ループ内変数,動く範囲)か(ループ内変数,始めの数,終わりの数)、のどちらか
// Dがついてないものはループ変数は1ずつインクリメントされ、Dがついてるものはループ変数は1ずつデクリメントされる
#define FOR(i, a, b) for (ll i = a; i <= (ll)(b); i++)
// xにはvectorなどのコンテナ
#define all(x) (x).begin(), (x).end() // sortなどの引数を省略したい
#define SI(x) ((ll)(x).size())        // sizeをsize_tからllに直しておく
#define MAX(x) *max_element(all(x))   // 最大値を求める
#define MIN(x) *min_element(all(x))   // 最小値を求める
#define debug(x) cerr << #x << ": " << x << "\\n" // 手動デバッグ
#define debugV(x)                                                              \\
  for (int i = 0; i < ((ll)(x).size()); i++)                                   \\
  cerr << #x << "at:" << i << ": " << x[i] << "\\n" // 手動デバッグ
#define YES(c) cout << ((c) ? "YES\\n" : "NO\\n"), 0
#define Yes(c) cout << ((c) ? "Yes\\n" : "No\\n"), 0
#define O(p) cout << p << "\\n", 0
#define OS(p) cout << p << " ", 0
#define ON(p) cout << p, 0
// 定数
#define INF 1000000000000 // 10^12:極めて大きい値,∞
#define inf 2147483647    // int値の最大値
#define MOD 1000000007    // 10^9+7:合同式の法
#define MAXR 100000 // 10^5:配列の最大のrange(素数列挙などで使用)
#define endl "\\n"   // endlを置き換える
// 略記
#define pb emplace_back                         // vectorヘの挿入
#define mp make_pair                            // pairのコンストラクタ
#define F first                                 // pairの一つ目の要素
#define S second                                // pairの二つ目の要素
#define CST(x) cout << fixed << setprecision(x) // 小数点以下の桁数指定

const int dy[4] = {1, 0, -1, 0};
const int dx[4] = {0, 1, 0, -1}; //^>v<

template <class T = int> T in() {
  T x;
  cin >> x;
  return (x);
}
template <class T> inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <class T> inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
int gcd(int a, int b) {
  if (b == 0)
    return a;
  else
    return gcd(b, a % b);
}
int lcm(int a, int b) { return a * b / gcd(a, b); }
int two(int n) {
  ll ans = 1;
  rep(i, n) { ans *= 2; }
  return ans;
}
int up_b(vector<ll> v, ll i) {
  int itr = upper_bound(all(v), i) - v.begin();
  if (itr == v.size()) {
    return -1;
  } else {
    return itr;
  }
}
int lo_b(vector<ll> v, ll i) {
  int itr = lower_bound(all(v), i) - v.begin();
  if (itr == v.size()) {
    return -1;
  } else {
    return itr;
  }
}

int d;
vector<int> c(26);
vector<vector<int>> s;
//------------------------------------------------------------
ll calc(vector<int> day, vector<vector<int>> s) {
  ll sum = 0;
  vector<int> last(26, 0);
  rep(i, d) {
    // debug(s[0][0]);
    sum += s[i][day[i] - 1];
    last[day[i] - 1] = i + 1;
    rep(j, 26) { sum -= c[j] * (i + 1 - last[j]); }
    // debugV(last);
  }
  return sum;
}

vector<int> solve(vector<vector<int>> s) {
  ll sum = 0;
  vector<int> last(26, 0);
  vector<int> day(26);
  rep(i, d) {
    // debug(s[0][0]);
    priority_queue<P> que;
    rep(k, 26) {
      ll tmp = 0;
      tmp += s[i][k];
      ll lasttmp = last[k];
      last[k] = i + 1;
      rep(j, 26) { tmp -= c[j] * (i + 1 - last[j]); }
      last[k] = lasttmp;
      que.push(mp(tmp, k));
    }
    day[i] = que.top().second + 1;
  }

  return day;
}

//------------------------------------------------------------
int main() {
  ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  //------------------------------------------------------------
  cin >> d;
  vector<vector<int>> s(d, vector<int>(26));
  rep(i, 26) cin >> c[i];
  rep(i, d) {
    rep(j, 26) { cin >> s[i][j]; }
  }
  vector<int> day(d);
  // rep(i,d)cin>>day[i];

  day = solve(s);

  rep(i, d) { O(day[i]); }

  //------------------------------------------------------------
  return 0;
}