제출 #1215244

#제출 시각아이디문제언어결과실행 시간메모리
1215244Cauchico나일강 (IOI24_nile)C++20
67 / 100
2081 ms6060 KiB
#include "nile.h"
#include <bits/stdc++.h> 
using namespace std;
typedef long long ll;
ll INF = (int)5e18;

vector<ll> calculate_costs(vector<int> W, vector<int> A, vector<int> B, vector<int> E) {
  int Q = (int)E.size();
  int n = (int)W.size();
  vector<array<int,3>> all(n);
  for (int i=0;i<n;i++) {
    all[i] = {W[i],A[i],B[i]};
  }
  sort(all.begin(),all.end());
  for (int i=0;i<n;i++) {
    W[i] = all[i][0]; A[i] = all[i][1]; B[i] = all[i][2];
  }
  W.insert(W.begin(),0); A.insert(A.begin(),0); B.insert(B.begin(),0);
  vector<ll> R(Q, 0);
  for (int t=0; t<Q;t++) {
    int D = E[t];
    vector<ll> dp(n+1,0);
    dp[1] = A[1];
    for (int i=2;i<=n;i++) {
      dp[i] = dp[i-1] + A[i];
      if (abs(W[i]-W[i-1]) <= D) dp[i] = min(dp[i], dp[i-2] + B[i] + B[i-1]);
      if (i > 2 and abs(W[i]-W[i-2]) <= D) dp[i] = min(dp[i], dp[i-3] + B[i-2] + A[i-1] + B[i]);
    }
    R[t] = dp.back();
  }
  return R;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...