제출 #1355917

#제출 시각아이디문제언어결과실행 시간메모리
1355917kawhiet서열 (APIO23_sequence)C++20
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>
#include "cyberland.h"
using namespace std;

constexpr double inf = 1e18;

vector<vector<pair<int, int>>> g;

vector<double> get(int t, int n, int skip) {
  priority_queue<pair<double, int>, vector<pair<double, int>>, greater<pair<double, int>>> pq;
  vector<double> d(n, inf);
  d[t] = 0;
  pq.push({0, t});
  while (!pq.empty()) {
    auto [k, u] = pq.top();
    pq.pop();
    if (k > d[u]) continue;
    for (auto [v, w] : g[u]) {
      if (v == skip) continue;
      if (d[v] > k + w) {
        d[v] = k + w;
        pq.push({d[v], v});
      }
    }
  }
  return d;
}

double solve(int n, int m, int k, int h, vector<int> x, vector<int> y, vector<int> c, vector<int> arr) {
  g.assign(n, {});
  for (int i = 0; i < m; i++) {
    g[x[i]].push_back({y[i], c[i]});
    g[y[i]].push_back({x[i], c[i]});
  }
  vector<double> t = get(0, n, -1);
  vector<double> d = get(h, n, 0);
  vector<double> s = get(0, n, h);
  if (t[h] == inf) {
    return -1;
  }
  double mn = t[h];
  int pos = 0;
  for (int i = 0; i < n; i++) {
    if (arr[i] == 0 && s[i] != inf) {
      if (d[i] < mn) {
        mn = d[i];
        pos = i;
      }
    }
  }
  double chk = 0;
  for (int i = pos; i < h; i++) {
    chk += c[i];
  }
  assert(chk == mn);
  int left = 0;
  for (int i = pos + 1; i <= h; i++) {
    if (arr[i] == 2) {
      left++;
    }
  }
  vector<vector<double>> dp(n, vector<double>(k + 1, inf));
  fill(dp[pos].begin(), dp[pos].end(), 0);
  for (int i = pos; i < h; i++) {
    // i, i + 1, c[i]
    for (int j = 0; j <= k; j++) {
      dp[i + 1][j] = dp[i][j] + c[i];
    }
    if (arr[i + 1] == 2) {
      for (int j = 0; j < k; j++) {
        dp[i + 1][j + 1] = min(dp[i + 1][j + 1], (dp[i][j] + c[i]) / 2);
      }
    }
    if (arr[i + 1] == 2 && arr[i] == 2) {
      for (int j = 0; j < k; j++) {
        dp[i + 1][j + 1] = min(dp[i + 1][j + 1], (dp[i][j] + c[i]) / 2);
        for (int s = 2; j + s <= k; j++) {
          double x = dp[i][j];
          for (int _ = 0; _ < s; _++) {
            x += c[i];
            x /= 2;
          }
          dp[i + 1][j + s] = min(dp[i + 1][j + s], x);
        }
      }
    }
  }
  return dp[h][k];
}

컴파일 시 표준 에러 (stderr) 메시지

sequence.cpp:2:10: fatal error: cyberland.h: No such file or directory
    2 | #include "cyberland.h"
      |          ^~~~~~~~~~~~~
compilation terminated.