Submission #1061686

#TimeUsernameProblemLanguageResultExecution timeMemory
1061686mychecksedadOvertaking (IOI23_overtaking)C++17
39 / 100
3565 ms8412 KiB
#include "overtaking.h"
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define all(x) x.begin(),x.end()
#define ll long long
#define ff first
#define ss second
const int N = 3005;
const ll INF = 1e18;


vector<ll> T, W, S;
int n, m, x, L;
void init(int Ll, int nn, std::vector<long long> t, std::vector<int> w, int xx, int mm, std::vector<int> s)
{ 
  L = Ll, n=nn, m=mm, T=t, x=xx;
  for(int x: w) W.pb(x);
  for(int x: s) S.pb(x);
  W.pb(x);
  S.pb(Ll);
  return;
}

long long arrival_time(long long Y)
{
  T.pb(Y);
  vector<pair<ll, int>> F;
  for(int i =0; i<= n; ++i) F.pb({W[i], i});
  sort(all(F));
  reverse(all(F));
  // for(int j = 0; j <= n; ++j) cout << F[j].ff << ' ';
  vector<vector<ll>> dp(n + 2, vector<ll>(m + 2));
// cout << '\n';

  // for(int i = 0; i <= n; ++i) dp[i][0] = T[F[i].ss];
  // for(int j = 1; j <= m; ++j){
  //   ll mx = 0;
  //   vector<ll> pref(n+1);
  //   int last = 0;
  //   for(int i = 0; i <= n; ++i){
  //     if(i > 0) if(T[F[i].ss] != T[i - 1].ff) last = i - 1;
  //     dp[i][j] = max(dp[i][j - 1] + (S[j] - S[j - 1]) * F[i].ff, pref[last]);
  //     pref[i] = max(i == 0 ? 0ll : pref[i - 1], dp[i][j]);
  //   }
  // }
  for(int i = 0; i <= n; ++i){
    dp[i][0] = T[F[i].ss];
    for(int j = 1; j <= m; ++j){
      // dp[i][j] = ---;
      ll mx = dp[i][j - 1] + F[i].ff * (S[j] - S[j-1]);
      for(int i2 = 0; i2 < i; ++i2){
        if(dp[i2][j - 1] < dp[i][j - 1]) mx=max(mx, dp[i2][j]);
      }
      dp[i][j]=mx;
    }
  }
  // for(int i = 0; i <= m; ++i){
  //   for(int j = 0; j <= n; ++j) cout << dp[j][i] << ' ';
  //   cout << '\n';
  // }
  // cout << '\n';


  T.pop_back();
  int idx;
  for(int i = 0; i <= n; ++i) if(F[i].ss == n) idx = i;
  return dp[idx][m];
}

Compilation message (stderr)

overtaking.cpp: In function 'long long int arrival_time(long long int)':
overtaking.cpp:68:16: warning: 'idx' may be used uninitialized in this function [-Wmaybe-uninitialized]
   68 |   return dp[idx][m];
      |                ^
#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...