Submission #1227546

#TimeUsernameProblemLanguageResultExecution timeMemory
1227546HossamHero7Shortcut (IOI16_shortcut)C++20
31 / 100
2093 ms2380 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #include "shortcut.h" // #include "grader.cpp" long long find_shortcut(int n, std::vector<int> _f, std::vector<int> _d, int _c) { ll c = _c; vector<ll> f(n-1) , d(n); for(int i=0;i<n-1;i++) f[i] = _f[i]; for(int i=0;i<n;i++) d[i] = _d[i]; ll ans = 1e18; vector<ll> p(n); for(int i=1;i<n;i++){ p[i] = p[i-1] + f[i-1]; } vector<vector<ll>> f1(n,vector<ll>(n)); for(int j=0;j<n;j++){ f1[j][j] = d[j] - p[j]; for(int i=j+1;i<n;i++){ f1[j][i] = max(f1[j][i-1],d[i]-p[i]); } } for(int r=0;r<n;r++){ for(int l=0;l<r;l++){ ll mx = 0; vector<ll> f2(n) , f3(n); f2[0] = -p[0] + d[0]; f3[l] = p[l] + d[l]; for(int i=1;i<n;i++) f2[i] = max(f2[i-1] , -p[i] + d[i]); for(int i=l+1;i<n;i++) f3[i] = max(f3[i-1] , p[i] + d[i]); for(int i=1;i<n;i++){ if(i <= l){ mx = max(mx , p[i] + d[i] + f1[0][i-1]); } else if(i <= r){ if(p[l] + p[r] + c < 2 * p[i] && l){ mx = max(mx , p[l] + f2[l-1] + c + p[r] - p[i] + d[i]); } else if(l){ mx = max(mx , p[i] + d[i] + f1[0][l-1]); } // for(int j=0;j<l;j++){ // ll x = min(p[i] - p[j] , p[l] - p[j] + c + p[r] - p[i]); // mx = max(mx , x + d[i] + d[j]); // } ll C = -p[l] + c + p[r]; int idx = lower_bound(p.begin()+l,p.begin()+min(r,i),(2*p[i]-C+1)/2) - p.begin(); if(idx > l) { mx = max(mx , f3[idx-1] + C - p[i] + d[i]); } if(idx < min(r,i)){ mx = max(mx , p[i] + d[i] + f1[idx][min(r,i)-1]); } // for(int j=l;j<min(r,i);j++){ // ll x = min(p[i] - p[j] , p[j] - p[l] + c + p[r] - p[i]); // mx = max(mx , x + d[i] + d[j]); // } } else { if(l){ ll C = p[l] + c - p[r]; if(C >= 0) mx = max(mx , p[i] + d[i] + f1[0][l-1]); else mx = max(mx , C + p[i] + d[i] + f2[l-1]); } // for(int j=0;j<l;j++){ // ll x = min(p[i] - p[j] , p[l] - p[j] + c + p[i] - p[r]); // mx = max(mx , x + d[i] + d[j]); // } for(int j=l;j<min(r,i);j++){ ll x = min(p[i] - p[j] , p[j] - p[l] + c + p[i] - p[r]); mx = max(mx , x + d[i] + d[j]); } mx = max(mx , p[i] + d[i] + f1[r][i-1]); // for(int j=r;j<i;j++){ // mx = max(mx , p[i] - p[j] + d[i] + d[j]); // } } } ans = min(ans , mx); } } return ans; }

Compilation message (stderr)

shortcut.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
shortcut_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#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...