제출 #931447

#제출 시각아이디문제언어결과실행 시간메모리
931447mariaclaraShortcut (IOI16_shortcut)C++17
0 / 100
1 ms500 KiB
#include "shortcut.h" #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pii; const int MAXN = 1e6+5; #define all(x) x.begin(), x.end() #define mk make_pair #define pb push_back #define f first #define s second ll find_shortcut(int n, vector<int> l, vector<int> d, int c) { vector<ll> diam_L(n), diam_R(n), dist_L(n), dist_R(n); dist_L[0] = diam_L[0] = d[0]; for(int i = 1; i < n; i++) { dist_L[i] = max((ll)d[i], dist_L[i-1] + l[i-1]); diam_L[i] = max(diam_L[i-1], dist_L[i-1] + l[i-1] + d[i]); } dist_R[n-1] = diam_R[n-1] = d[n-1]; for(int i = n-2; i >= 0; i--) { dist_R[i] = max((ll)d[i], dist_R[i+1] + l[i]); diam_R[i] = max(diam_R[i+1], dist_R[i+1] + l[i] + d[i]); } ll resp = 1e18; for(int i = 0; i < n; i++) { // escolhendo onde resp1 vai estar ll sum = 0; for(int j = i+1; j < n; j++) { // escolhendo onde resp2 vai estar sum += l[j-1]; ll diam = max({diam_R[i+1], diam_L[j-1], dist_L[i] + dist_R[j] + min((ll)c, sum)}); resp = min(resp, diam); } } return resp; }
#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...